PDO подготовленный запрос с IN()

205
04 мая 2018, 11:38

При переходе на PDO, уперся в очередную "засаду".

Есть запрос (упрощен до нельзя для простоты понимания)

SELECT * FROM tovar WHERE num IN(:num)

$itog->bindValue(':num', 1,2,3,4,5,6,7,8,);

$itog->execute();

Пробовал и массив передавать в bindValue и циклом его выводить и еще разные варианты, но итог один... Выводится ТОЛЬКО ПЕРВАЯ ЦИФРА из всего ряда.

Тоесть как не крути, а запрос получается только

SELECT * FROM tovar WHERE num IN(1 или 2 или 3 или 4 или т.д),

но никак не

SELECT * FROM tovar WHERE num IN(1,2,3,4,5,6,7,8)

Подскажите плз умным словом (хоть намек куда думать).

Видел тут идентичную тему

Как создать подготовленный запрос с IN()?

и там только один ответ и он удручает. Неужели всесильный PDO действительно без костыля не может "переварить" такую задачу.

Answer 1

Собственно решение нашел такое.

$param = str_repeat('?,', count($_GET['param']) - 1) . '?'; получаем ?,?,?,?,? в том количестве, сколько выбрано чек боксов.

db->prepare(SELECT * FROM tovar WHERE num IN($param));

db->execute($_GET['param']);

Запрос работает как надо, а вот как сделать его безопасным от SQL инъекций кто может подсказать? Не могу никак сообразить...

Answer 2

Судя по всему кавычки пропустили

   $itog->bindValue(':num', '1,2,3,4,5,6,7,8');
READ ALSO
Laravel и PHP 7

Laravel и PHP 7

Ларавель 56 поддерживается только на PHP 7

259
Получить размер изображения?

Получить размер изображения?

Есть путь к изображениюКак получить ширину и высоту изображения по данному пути средствами PHP

205
Динамическое подключение к базе Yii2

Динамическое подключение к базе Yii2

Хочу подключить к базе данных динамически, чтобы пользователь мог подключиться только к своей базеMysqli есть несколько пользователей и я хочу...

187
Call to undefined function Illuminate\Encryption\openssl_cipher_iv_length()

Call to undefined function Illuminate\Encryption\openssl_cipher_iv_length()

Недавно потребовалось настроить сервер wamp для развертывания проекта на laravelНо встретился вот с такой ошибкой Call to undefined function Illuminate\Encryption\openssl_cipher_iv_length()

291