Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql PDO:无效参数编号:绑定变量的数量与令牌的数量不匹配_Mysql_Pdo_Parameters - Fatal编程技术网

Mysql PDO:无效参数编号:绑定变量的数量与令牌的数量不匹配

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

我不明白为什么会得到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 {
   $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);
}