@dind

Можно ли передавать массив в этом запросе MySQL?

Есть такой запрос
$listings = $iaAuto->get(array('model_id' => '1670'), $pagination['start'], $pagination['limit'], $_SESSION[iaAuto::SESSION_SORTING_KEY]);

Можно ли передавать массив или данные через запятую вместо 1670?

Есть другой запрос
$listings = $iaDb->all(iaDb::ALL_COLUMNS_SELECTION, "`model_id` IN ({$parrentIds})", 0, 20, 'autos');

Который вытаскивает все что есть в $parrentIds (айдишки через запятую)

Можно ли в первом запросе как то использовать IN?

Или первый запрос как то пропускать через foreach и каким то образом сохранять все выведенные данные в одном $listings

foreach ($array as $key => $value)
{
$listings = $iaAuto->get(array('model_id' => $value), $pagination['start'], $pagination['limit'], $_SESSION[iaAuto::SESSION_SORTING_KEY]);
}

Но здесь каждый раз перезаписывается $listings
  • Вопрос задан
  • 2279 просмотров
Пригласить эксперта
Ответы на вопрос 2
Если $parrentIds = [1, 2, 3];
массив, то
$listings = $iaDb->all(iaDb::ALL_COLUMNS_SELECTION, "`model_id` IN (". join( ', ', $parrentIds ) .")", 0, 20, 'autos');
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Здесь нет никакого запроса mysql, даже близко.
А есть какой-то самопальный винегрет, который собирает запрос из кусочков неизвестным читателю способом.

В любом случае, первое, что надо усвоить про составление запросов: ни одна переменная не должна попадать в запрос напрямую!

То есть, первый вариант делает весь этот самопальный винегрет (который, тем не менее, делает работу с БД безопасной) - бесполезным.

Поэтому, стоит использовать второй вариант, который, хоть и не оптимальный, но зато безопасный. А чтобы переменная не "затиралась" (а что ей еще остаётся делать, если её постоянно перезаписывают?), надо сделать её массивом:
$listings = [];
foreach ($array as $key => $value)
{
  $listings[] = $iaAuto->get(
        array('model_id' => $value), 
        $pagination['start'], 
        $pagination['limit'], 
        $_SESSION[iaAuto::SESSION_SORTING_KEY]
    );
}

Полученный в результате массив скорее всего будет отличаться от ожидаемого, так что надо будет немного изменить логику его перебора
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы