是否有(棘手/非标准)的方式来做到这一点?
会是这样的
$stmt = $db->prepare( 'SELECT title FROM episode WHERE id IN (?, ?, ?, ?);
Run Code Online (Sandbox Code Playgroud)
工作?因此,如果我想搜索可变数量的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);
Run Code Online (Sandbox Code Playgroud)
即使这样可行,但对于使用相同的预准备语句运行多组数据仍然没有用,除非$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);
Run Code Online (Sandbox Code Playgroud)
它失败是因为准备好的语句被构造成它将搜索单个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%);
Run Code Online (Sandbox Code Playgroud)
Ale*_*233 10
MySql有一个FIND_IN_SET函数,您可以使用它来实现相同的结果:
$ids = array(1,2,3,4,5,6,7);
$stmt = $db->prepare( 'SELECT title FROM episode WHERE FIND_IN_SET(id,?)' );
$param = implode(',',$ids);
$stmt->bind_param('s',$param);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)