我有这个准备好的陈述查询
$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);
和
带有消息'SQLSTATE [HY000]的未捕获异常'PDOException':常规错误:2031'
referring to
$ stmt-> execute();
1。错误是由默认情况下预处理语句转换为字符串所有值引起的,所以我必须手动定义int
?这就是为什么bindParam
工作得很好?或者是我缺少的其他东西?
2. 为什么bindParam("sssiii"...
sytntax不起作用?
3。我希望此查询动态获取其值,因此手动使用bindParam
不是一种选择。我想使用关联数组或bindParam("sssiii"...
语法。
我该怎么做?感谢
答案 0 :(得分:3)
$query_array
已经是一个数组,因此当您运行$stmt->execute(array($query_array))
时,您将进入一个多维数组。这样:
$stmt->execute($query_array);
应该就是您所需要的一切。
关于bind
问题,您没有使用PDO
语法
您在mysqli
使用sssiii
语法。