【发布时间】:2011-05-20 14:04:50
【问题描述】:
是否有(棘手/非标准)方法可以做到这一点?
想要什么
$stmt = $db->prepare( 'SELECT title FROM episode WHERE id IN (?, ?, ?, ?);
工作?因此,如果我想搜索可变数量的 id,我可以这样做吗
$ids = array(1,2,3,4,5,6,7);
$idSection = implode(array_pad(array(), count($ids), '?')) //To give ?,?,?,?,?,?,?
$stmt = $db->prepare( 'SELECT title FROM episode WHERE id IN ($idSection);
$stmp->execute($ids);
即使这样可行,它对于使用相同的预准备语句运行多组数据仍然没有真正的用处,除非每次搜索的 $ids 集的长度都相同并且它不适用命名占位符。
我假设你这样做
$stmt = $db->prepare( 'SELECT title FROM episode WHERE id IN (:ids);
$ids = implode('","' array(1,2,3,4,5,6,7));
$stmt->bindParam( ':ids', $ids);
它失败了,因为准备好的语句被构造成它将搜索单个 id 值,并且 "1","2","3","4","5","6","7" 不会不匹配?
我确信有比不使用IN(...) 子句更好的答案。我是否只需要手动清理 $ids 术语并将其包含在不带占位符的查询中?
$stmt = $db->prepare( "SELECT title FROM episode WHERE id IN $ids AND genre like :genre");
$stmt->bindParam( ':genre', '%$genre%);
【问题讨论】: