0

我有这个准备好的语句查询

$stmt = $conn->prepare("
        UPDATE language 
        SET lang_alias=:lang_alias , lang_name=:lang_name  
        WHERE lang_id=:lang_id"
);

如果我设置一个数组来绑定值

$query_array = array ( ":lang_alias" => "en", ":lang_name" => "English (UK)", ":lang_id" => 1 ) ;

然后执行它

$stmt->execute(array($query_array));

它不会工作,我明白了

注意:数组到字符串的转换referring to$stmt->execute(array($query_array));

Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number'指同一行。

然后我尝试使用bindParam绑定值

$stmt->bindParam(':lang_alias', $a);
$stmt->bindParam(':lang_name', $c);
$stmt->bindParam(':lang_id', $d3, PDO::PARAM_INT);

并且工作正常

如果我尝试另一种bindParam语法

$stmt->bindParam("sssiii", $a, $b, $c, $d1, $d2, $d3);

它不会工作。给

警告:PDOStatement::bindParam() 最多需要 5 个参数,给定 7 个参数referring to$stmt->bindParam("sssiii", $a, $b, $c, $d1, $d2, $d3);

未捕获的异常“PDOException”,带有消息“SQLSTATE[HY000]:一般错误:2031” referring to$stmt->execute();

1.错误是由于默认情况下准备好的语句转换为字符串所有值,所以我必须int手动定义吗?这就是为什么bindParam工作正常?还是我缺少其他东西?

2.为什么bindParam("sssiii"...语法不起作用?

3.我希望这个查询动态地获取它的值,所以bindParam不能手动使用。我想使用关联数组或bindParam("sssiii"...语法。

我怎样才能做到这一点?谢谢

4

1 回答 1

3

$query_array已经是一个数组,所以当你运行时,你$stmt->execute(array($query_array))正在制作一个多维数组。这:

$stmt->execute($query_array);

应该是你所需要的。

至于bind你没有使用PDO语法的问题

您正在使用mysqli语法 with sssiii

于 2016-06-13T13:06:56.890 回答