Php 如何调试SQLSTATE[HY000]:常规错误:已准备语句中的2031
我已经准备好了这个查询语句Php 如何调试SQLSTATE[HY000]:常规错误:已准备语句中的2031,php,pdo,prepared-statement,bindparam,Php,Pdo,Prepared Statement,Bindparam,我已经准备好了这个查询语句 $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" => "Engl
$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));
我明白了,这行不通
注意:数组到字符串的转换指的是$stmt->execute(数组($query\u数组))
和未捕获异常'PDOException',消息'SQLSTATE[HY093]:无效参数号'
引用同一行
然后我尝试使用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个参数是给定的引用的$stmt->bindParam(“sssiii”、$a、$b、$c、$d1、$d2、$d3)
及
未捕获异常“PDOException”,消息为“SQLSTATE[HY000]:一般错误:2031”参考
$stmt->execute()
1。错误是由以下事实引起的:默认情况下,准备好的语句将所有值转换为字符串,因此我必须手动定义int
?这就是为什么bindParam
工作正常的原因?还是我遗漏了什么
2.为什么bindParam(“sssiii”…
sytntax不能工作
3.我希望此查询动态获取其值,因此手动使用bindParam
不是一个选项。我希望使用关联数组或bindParam(“sssiii”…
语法
我该怎么做呢?谢谢这个$query\u数组已经是一个数组了,所以当你运行$stmt->execute(array($query\u array))
时,你就变成了一个多维数组。这是:
$stmt->execute($query_array);
这应该是你所需要的
至于bind
问题,您没有使用PDO
语法
您正在对sssiii
使用mysqli
语法
$query\u数组
已经是一个数组,因此当您运行$stmt->execute(数组($query\u数组))
时,您将创建一个多维数组。这:
$stmt->execute($query_array);
这应该是你所需要的
至于bind
问题,您没有使用PDO
语法
您正在对sssiii
使用mysqli
语法
@Fred ii-完成。仍然是相同的错误。这是SO中的一个输入错误,而不是我的代码中的一个输入错误。@slevin如果Chris的评论解决了问题,也许可以邀请他将其作为答案发布,然后其他人从他脚下拉开地毯;-)@chris85是的,就是它,谢谢你指出它。bindParam(“sssiii”)的问题…
语法仍然存在。我看不出有什么问题。sssiii
是mysqli_uuuu语法,而不是PDO。@Fred ii-谢谢编辑。@Fred ii-完成。仍然是相同的错误。那是SO中的一个输入错误,不是我的代码。@slevin如果Chris的评论解决了这个问题,也许可以邀请他作为答案发布,然后其他人从他脚下拉开地毯;-)@chris85是的,就是这样,谢谢你指出。bindParam(“sssiii”)语法的问题仍然存在。我看不出有什么问题。sssiii
是mysqli_uuu语法,而不是PDO。@Fred ii-谢谢你的编辑。最后一件事。所以,准备好的语句没有bindParam($a,$b,$c)
语法?据我所知,不,不是在PDO中。在PDO中,bindParam
期望绑定一个参数。最后一件事。因此,准备好的语句没有bindParam($a,$b,$c)
语法?据我所知,不,不是在PDO中。在PDO中,bindParam
需要绑定一个参数。