我正在尝试将包含以下内容的mysql_query语句转换为PDO:
$string = '2, 3, 4, 5, 7, 8';
mysql_query(" ... IN($string) ...");
这在mysql_query
语句中可以很好地工作,但在PDO prepare和execute中不起作用(不返回结果)。
我在这里错过了什么?
如果查询sql与mysql_query
配合良好,那么它与pdo配合良好。
如果只使用一个占位符绑定整个字符串,则不会起作用。您需要为IN
子句的每个值绑定。
示例:
$string = '2, 3, 4, 5, 7, 8';
$params = explode(', ', $string);
$sth = $pdo->prepare(' ... IN('.join(',', array_fill(0, count($params), '?')).') ...');
$ret = $sth->execute($params);
请参考MySQL IN语句的PDO绑定值,或者我可以将数组绑定到IN()条件吗?。
我认为这是您正在寻找的解决方案,因为您无法将多个值绑定到.
"在SQL语句的in()子句中,不能将多个值绑定到单个命名参数。"
http://php.net/manual/en/pdo.prepare.php
这违背了事先准备好的发言的全部目的。