警告:mysqli_stmt::bind_result():绑定变量的数量与准备好的语句错误中的字段数量不匹配

Warning: mysqli_stmt::bind_result(): Number of bind variables doesn#39;t match number of fields in prepared statement error(警告:mysqli_stmt::bind_result():绑定变量的数量与准备好的语句错误中的字段数量不匹配) - IT屋-程序员软件开发技术分享社
本文介绍了警告: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'];

这篇关于警告:mysqli_stmt::bind_result():绑定变量的数量与准备好的语句错误中的字段数量不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

Warning: mysqli_query() expects at least 2 parameters, 1 given. What?(警告:mysqli_query() 需要至少 2 个参数,1 个给定.什么?)
INSERT query produces quot;Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean givenquot;(INSERT 查询产生“警告:mysqli_num_rows() 期望参数 1 为 mysqli_result,给出布尔值;)
prepared statements - are they necessary(准备好的陈述 - 它们是否必要)
Do I need to escape my variables if I use MySQLi prepared statements?(如果我使用 MySQLi 准备好的语句,是否需要转义我的变量?)
Properly Escaping with MySQLI | query over prepared statements(使用 MySQLI 正确转义 |查询准备好的语句)
Is it possible to use mysqli_fetch_object with a prepared statement(是否可以将 mysqli_fetch_object 与准备好的语句一起使用)