2

这是我创建准备好的语句的函数:

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;
}

$查询是

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)
}  

我无法弄清楚问题,因为仅在将参数绑定到插入语句时才会引发此错误。选择语句没有问题!

4

1 回答 1

1

这是一个清楚的例子,说明了为什么mysqli 完全不能用于准备好的语句。
使用 PDO 或手动解析自定义占位符,就像safemysql一样。

与 mysqli 不同,PDO 有 2 个很棒的东西可以使准备好的语句可用:

  • 按值绑定占位符,通过使用bindValue()数组或将数组传递给execute().
  • 将查询结果作为通常的数组返回,而不是单独变量的奇怪绑定。
于 2013-02-23T17:04:35.167 回答