简体   繁体   English

mysqli_stmt :: bind_param变量数与准备好的语句中的参数数不匹配

[英]mysqli_stmt::bind_param Number of variables doesn't match number of parameters in prepared statement

This is my function which creates the prepared statement: 这是我创建预准备语句的函数:

function query($query, $values_array) {

if ($stmt = $link->prepare($query)) {

    for ($i = 1; $i < count($values_array); $i++) {
     if (!$stmt->bind_param($values_array[0][$i-1], $values_array[$i])) {
        return false;
     }
    }

if (!$stmt->execute()) {
    return false;
}
$result = $stmt->get_result();
$stmt->close();
}

return $result;
}

$query is $ query是

insert into table (var1, var2, var3, var4, var5, var6) values (?, ?, ?, ?, ?, ?)

$values_array is $ values_array为

array(7) {
[0]=>
string(6) "diisii"
[1]=>
float(9)
[2]=>
int(1)
[3]=>
int(1)
[4]=>
string(5) "now()"
[5]=>
int(1)
[6]=>
int(1)
}  

I cannot figure out the problem as this error is only thrown when binding params to an insert statement. 我无法弄清楚问题,因为仅在将参数绑定到插入语句时才会抛出此错误。 Select statements work without problems! 选择语句可以正常工作!

This is clear example showing why mysqli is totally unusable with prepared statements. 这是一个清晰的示例,说明了为什么mysqli不能完全与准备好的语句一起使用。
Either use PDO or manually parsed custom placeholders, like safemysql does. 使用PDO或手动解析自定义占位符,就像safemysql一样。

Unlike mysqli, PDO has 2 great things that makes prepared statements usable: 与mysqli不同,PDO有2件事使准备好的语句可用:

  • Binding placeholders by value , either by using bindValue() or passing array to execute() . 通过使用bindValue()或将数组传递给execute()来按绑定占位符。
  • returning query result as a usual array instead of weird binding of separate variables. 返回查询结果作为常规数组,而不是单独绑定多个变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Mysqli:mysqli_stmt :: bind_param():变量数与准备好的语句中的参数数不匹配 - Mysqli:mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement mysqli_stmt :: bind_param():变量数与准备好的语句中的参数数不匹配 - mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement mysqli_stmt :: bind_param():变量数量与php中准备好的语句中的参数数量不匹配 - mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in php 警告:mysqli_stmt :: bind_param()变量数与准备好的语句中的参数数不匹配 - Warning: mysqli_stmt::bind_param() Number of variables doesn't match number of parameters in prepared statement (PHP)警告:mysqli_stmt :: bind_param():变量数与准备好的语句中的参数数不匹配 - (PHP) Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement 警告:mysqli_stmt::bind_param():变量数与 C:\User..\ on 148 中准备好的语句中的参数数不匹配 - Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in C:\User..\ on 148 PHP 警告:mysqli_stmt::bind_param():变量数与准备好的语句中的参数数不匹配 - PHP Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement mysqli_stmt :: bind_param():第64行上已准备好的语句中的变量数量与参数数量不匹配 - mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement on line 64 mysqli_stmt::bind_param() [mysqli-stmt.bind-param]:变量数量与参数数量不匹配 - mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of variables doesn't match number of parameters call_user_func_array()-警告:mysqli_stmt :: bind_param():变量数与准备好的语句中的参数数不匹配 - call_user_func_array() - Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM