我想写一个MySQL语句,如下所示:
SELECT * FROM someTable WHERE someId IN (value1, value2, value3, ...)
但我不知道IN()中有多少值,我知道我可以使用字符串操作在执行过程中生成查询,但是由于这将在一个循环中运行,我想知道是否可以使用PDOPreparedStatement来实现它。
例如:
$query = $PDO->prepare('SELECT * FROM someTable WHERE someId IN (:idList)');
$query->bindValue(':idList', implode(',', $idArray));
这有可能吗?
发布于 2018-07-25 16:17:17
这个方法是不可行的,对于要传入的每个参数,必须有一个单独的占位符,其他一切都不符合参数的用途都是不行的
$ids = array(2, 4, 6, 8);
// prepare a string that contains ":id_0,..,:id_n" and include it in the SQL
$plist = ':id_'.implode(',:id_', array_keys($ids));
$sql = "SELECT * FROM someTable WHERE someId IN ($plist)";
// prepare & execute the actual statement
$parms = array_combine(explode(",", $plist), $ids);
$stmt = $PDO->prepare($sql);
$rows = $stmt->execute($parms);
如果允许在绑定期间将值数组传递给单个参数,则可以有效地更改SQL语句。
https://stackoverflow.com/questions/-100000414
复制相似问题