Php mysqli_stmt::bind_param变量数不';t匹配已准备语句中的参数数
这是创建准备好的语句的函数:Php mysqli_stmt::bind_param变量数不';t匹配已准备语句中的参数数,php,mysqli,Php,Mysqli,这是创建准备好的语句的函数: 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
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;
}
$values\u数组是
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)
}
我无法找出问题所在,因为只有将参数绑定到insert语句时才会引发此错误。Select语句工作正常 这是一个清楚的例子,说明了为什么mysqli在准备好的语句中完全不可用。
使用PDO或手动解析的自定义占位符,如 与mysqli不同,PDO有两大优点,可以使准备好的语句可用:
- 通过使用
或将数组传递给bindValue()
,按值绑定占位符execute()
- 将查询结果作为常规数组返回,而不是单独变量的奇怪绑定李>
无法工作,因为它是作为文本字符串传递的。您可以尝试使用可选的now()
签名,将类型字符串与所有参数一起传递,->bind_param
将now()省略时出现相同的错误。是的,我知道call_user_func_数组函数,但是我需要重新构造$values_数组,这是我不想做的。刚刚测试了PDO,它可以正常工作。多么奇怪的问题+1.调用用户函数数组(array($stmt,“bind_param”),$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) }