这是我创建预备语句的函数:
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是
insert into table (var1, var2, var3, var4, var5, var6) values (?, ?, ?, ?, ?, ?)
$ 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)
}
我无法弄清楚这个问题,因为只有在将params绑定到insert语句时才会抛出此错误。选择语句没有问题!
答案 0 :(得分:1)
这是一个明显的例子,说明为什么 mysqli完全无法使用预备语句。
使用PDO或手动解析的自定义占位符,例如safemysql。
与mysqli不同,PDO有两个很好的东西可以使预备语句可用:
bindValue()
或将数组传递给execute()
。