虽然您无法使用准备好的查询完全满足您的需求,但您可以为查询动态生成 $sql 字符串以完成相同的操作。
给定一些数组 $array = (n, n1, n2, ... nN)
$sql = "SELECT foo FROM bar WHERE tag IN (";
foreach($array as $value) {
$sql .= "'" . $value . "', ";
}
// Strip off the last comma and space from the IN clause
$sql = substr($sql, 0, strlen($sql) - 2);
$sql .= ")";
这当然不是最优雅的解决方案,您必须做更多的数据验证或转义准备好的查询可以更好地处理的危险字符,但它会完成这项工作。
附带说明一下,有一些 ORM(对象关系映射器)库支持诸如接受一组值以在数据库语句中生成 IN 子句之类的东西。 Propel 是我最有经验的一种,但我相信像 Doctrine 这样的其他人也会有类似的方法。
一个推进式的例子就像
$results = BarQuery::create()
->select('foo')
->filterByTag(array($value1, $value2, ..., $vauleN)
->find();
许多附加功能和支持,但确实增加了项目的初始设置时间。