Запросы типа WHERE IN() в библиотеке aura sql query
В документации есть такое но что то у меня не работает:
You can also use IN conditions by binding an array to the placeholder. ->where('bar IN (:bar)', ['bar' => [1, 2, 3]])
Подскажите как заставить работать эту выборку? Например:
$select = $queryFactory->newSelect();
$select
->cols(['*'])
->from('table')
->where('id IN (:id)', ['id' => [1, 2, 3]]);
$pdo = new PDO(...);
$sth = $pdo->prepare($select->getStatement());
$sth->execute($select->getBindValues());
$result = $sth->fetch(PDO::FETCH_ASSOC);
Тут очевидно что нужно как то правильно забандить в PDO этот массив но как именно? По идее библиотека aura sql query должна брать на себя этот момент и $select->getBindValues() должен возвращать уже как нужно сформированный запрос, но этого почему то не происходит.. или я чего то не понимаю? Если кто сталкивался подскажите пожалуйста.
P/S/ Как в PDO работать с WHERE IN() я понимаю, хотелось бы воспользоваться именно функционалом библиотеки aura sql query раз уж там такая возможность присутствует..
Ответы (1 шт):
В общем так и не нашел ответ на вопрос. Сделал пока так:
$ids = [1,2,3];
$in = implode(',', $ids);
$select = $queryFactory->newSelect();
$select
->cols(['*'])
->from('table')
->where("id IN ({$in})");
$pdo = new PDO(...);
foreach($value as &$val){
$val = $pdo->quote($val); //iterate through array and quote
}
$sth = $pdo->prepare($select->getStatement());
$sth->execute($select->getBindValues());
$result = $sth->fetch();
Так конечно работает, но не безопасно т.к. на прямую передается переменная $in в запрос. Так и не понял какую реализацию предлагает aura sql query.