警告:mysqli_stmt::bind_result():绑定变量的数量与准备好的语句错误中的字段数量不匹配
我有一个 mysql 查询,我正在将其转换为 mysqli(准备好的语句),但遇到了一个问题,引发了以下错误,
I had a mysql query and I was converting it to mysqli(prepared statement) but I ran in to a problem which throws the below error,
警告:mysqli_stmt::bind_result():绑定变量的数量与准备好的语句中的字段数量不匹配
Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement
Mysql 代码
$random_name_generated = vpb_generate_random_name().'.jpg'; //Generated name for uploaded files or images
if (move_uploaded_file($_FILES['file_to_upload']['tmp_name'], $final_uploads_location)) {
$check_empty_field = mysql_query("select * from `vpb_uploads` where `username` = '".mysql_real_escape_string(strip_tags($username))."' and `firstname` = '".mysql_real_escape_string("")."' and `lastname` = '".mysql_real_escape_string("")."'");
if (mysql_num_rows($check_empty_field) < 1) {
mysql_query("insert into `vpb_uploads` values('', '".mysql_real_escape_string($username)."', '', '', '".mysql_real_escape_string($random_name_generated)."', '', '', '', '', '".mysql_real_escape_string(date("d-m-Y"))."')");
$identity = "image_one";
} else {
$get_empty_field = mysql_fetch_array($check_empty_field);
$image_one = strip_tags($get_empty_field["image_one"]);
$image_two = strip_tags($get_empty_field["image_two"]);
$image_three = strip_tags($get_empty_field["image_three"]);
$image_four = strip_tags($get_empty_field["image_four"]);
$image_five = strip_tags($get_empty_field["image_five"]);
global $identity;
以下是我尝试过的,即使它不起作用.我已经知道它行不通,但我想在提问之前自己尝试一下.错误来自 $get_empty_field = $stmt->bind_result($stmt);
The below is what I tried even though it didn't work. I already knew it won't work but I wanted to try it myself before asking a question. And the error is coming from the $get_empty_field = $stmt->bind_result($stmt);
if (move_uploaded_file($_FILES['file_to_upload']['tmp_name'], $final_uploads_location)) {
$firstname = '""';
$lastname = '""';
$stmt = $mysqli->prepare("select * from `vpb_uploads` where `username` = ? and `firstname` = ? and `lastname` = ?");
$stmt->bind_param('sss', $username, $firstname, $lastname);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows < 1) {
$date = 'date("d-m-Y")';
$image_2 = "''";
$image_3 = "''";
$image_4 = "''";
$image_5 = "''";
$stmt = $mysqli->prepare("insert into `vpb_uploads` (`username`, `firstname`, `lastname`, `image_one`, `image_two`, `image_three`, `image_four`, `image_five`, `date`) values(?,?,?,?,?,?,?,?,?)");
$stmt->bind_param('sssssssss', $username, $firstname, $lastname, $random_name_generated, $image_2, $image_3, $image_4, $image_5, $date);
$stmt->execute();
$stmt->close();
$identity = "image_one";
} else {
$get_empty_field = $stmt->bind_result($stmt);
$image_one = strip_tags($get_empty_field["image_one"]);
$image_two = strip_tags($get_empty_field["image_two"]);
$image_three = strip_tags($get_empty_field["image_three"]);
$image_four = strip_tags($get_empty_field["image_four"]);
$image_five = strip_tags($get_empty_field["image_five"]);
global $identity;
推荐答案
你需要改变
$get_empty_field = $stmt->bind_result($stmt);
到
$get_empty_field = $stmt->bind_result($field1, $field2, $field3);
$fieldx
变量的数量等于所选字段的数量.如果你不知道有多少,使用这个:
The number of $fieldx
variables being equal to the number of fields that are selected. If you don't know how many there are, use this:
// Throw an exception if the result metadata cannot be retrieved
if (!$meta = $stmt->result_metadata())
{
throw new Exception($stmt->error);
}
// The data array
$data = array();
// The references array
$refs = array();
// Iterate over the fields and set a reference
while ($name = $meta->fetch_field())
{
$refs[] =& $data[$name->name];
}
// Free the metadata result
$meta->free_result();
// Throw an exception if the result cannot be bound
if (!call_user_func_array(array($stmt, 'bind_result'), $refs))
{
throw new Exception($stmt->error);
}
然后在获取后访问结果,使用 $data['field']
;
And then you access the result, after fetching, with $data['field']
;
相关文章