Есть ли (хитрый / нестандартный) способ сделать это?
Будет ли что-то вроде
$stmt = $db->prepare( 'SELECT title FROM episode WHERE id IN (?, ?, ?, ?);
работать?Так что, если бы я хотел найти переменное количество идентификаторов, я мог бы сделать
$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);
Это не удастся, потому чтоподготовленный оператор был составлен так, что он будет искать единственное значение идентификатора, и «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%);