Mysql PDO:无效参数编号:绑定变量的数量与令牌的数量不匹配
我不明白为什么会得到SQLSTATE[HY093]:无效参数编号:绑定变量的数量与令牌的数量不匹配错误消息,错误代码如下:Mysql PDO:无效参数编号:绑定变量的数量与令牌的数量不匹配,mysql,pdo,parameters,Mysql,Pdo,Parameters,我不明白为什么会得到SQLSTATE[HY093]:无效参数编号:绑定变量的数量与令牌的数量不匹配错误消息,错误代码如下: $myArr = array(283908,283951,284024,284064,284076,284099); $num = count($myArr); $req = "select * from MyTable where Id in (?,?,?,?,?,?) limit ?,?"; $start = 0; $limit = 3; try { $sq
$myArr = array(283908,283951,284024,284064,284076,284099);
$num = count($myArr);
$req = "select * from MyTable where Id in (?,?,?,?,?,?) limit ?,?";
$start = 0;
$limit = 3;
try {
$sql = $pdo->prepare($req);
$sql->bindParam($num+1, $start, PDO::PARAM_INT);
$sql->bindParam($num+2, $limit, PDO::PARAM_INT);
$sql->execute($myArr);
}
catch(PDOException $e) {
pdo_error($e->getMessage());
}
前6个问题标记与myArr内容绑定,最后2个问题标记与限制绑定。这只是一个例子,在现实生活中,myArr可以包含100多个值,并且其大小不是固定的。当您使用参数数组调用
PDOStatement::execute()
时,它将不会使用调用PDOStatement::bindParam()
中指定的参数。相反,只需将$start
和$limit
变量附加到$myArr
的末尾,并调用$sql->execute()
请参阅对PHP PDO文档的评论。否,它没有按预期工作:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,在第1行$pdo->setAttribute(pdo::ATTR_EMULATE_PREPARES,false)的“0”和“3”附近使用正确的语法;解决了,谢谢
try {
$sql = $pdo->prepare($req);
$myArr[] = $start
$myArr[] = $limit
$sql->execute($myArr);
}