[英]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件事使准备好的语句可用:
bindValue()
or passing array to execute()
. 通过使用bindValue()
或将数组传递给execute()
来按值绑定占位符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.