PDO execute执行报错:绑定变量数与令牌数不匹配问题求助
解决PDO execute参数不匹配的异常问题
嘿,问题一眼就能看出来——你构建$search_items数组的方式完全错了!
你现在的循环是把字符串形式的键值对塞进数组里,比如每个元素都是':search0' => '%cure%'这样的字符串,但PDO的execute方法需要的是一个关联数组:键是不带引号的参数名(比如:search0),值是对应的绑定内容。
你手动写的array(':search0' => '%cure%',...)是标准的关联数组,能被PDO正确识别,但循环生成的$search_items只是一堆字符串组成的索引数组,PDO根本找不到对应的参数键和值,自然会报"参数数量不匹配"的错误。
修正后的参数数组构建代码
把循环改成直接生成关联数组:
$search_items = array(); for ($x = 0; $x < $search_parts_count; $x++) { // 直接设置关联数组的键和值,不需要加引号包裹 $search_items[":search$x"] = "%{$search_parts[$x]}%"; } // 可以用print_r验证格式:print_r($search_items);
这样生成的$search_items就和你手动写的数组格式完全一致了,直接传给$stmt->execute($search_items)就能正常运行。
顺带说一句,你的SQL语句构建部分是没问题的,循环生成的:searchx标记数量和修正后的参数数组键数量完全对应,只要参数数组格式对了,问题就解决了。
内容的提问来源于stack exchange,提问作者Eric The Red
相关产品推荐
相关产品推荐

