我的代码:
$myArray = implode($myArray, ','); $sth = $dbh->prepare('SELECT foo FROM bar WHERE ids IN (:ids)'); $sth->bindParam(':ids', $myArray); $sth->execute(); $result = $sth->fetch(); echo $sth->rowCount(); 始终显示为1的计数,但是当我跳过参数化并仅将变量本身添加到其位置时,我得到了准确的计数。这里发生了什么?
您不能像这样为IN子句绑定参数。$ myArray字符串将仅计为一个值,例如执行以下操作:
SELECT foo FROM bar WHERE ids IN ('1,2,3') 即使有三个以逗号分隔的值,数据库也会将它们作为一个字符串值读取。
您需要以惯用的方式手动将IN列表插入查询中。
'SELECT foo FROM bar WHERE ids IN (' . $myArray .')' 不幸的是没有其他办法。至少现在(是。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。