Возможный дубликат:
PHP PDO: Можно ли привязать массив к условию IN ()?
Хорошо, это действительно беспокоит меня. Как я могу привязать paramater (который имеет несколько значений) для SQL "IN" statment в PDO PHP?
Вот основные сведения …
$allow = "'red', 'blue'"; SELECT * FROM colors WHERE type IN (:allow); $stmt->bindParam(':allow', $allow);
Это отлично работает, когда я подключаю $ allow самостоятельно, но при попытке связать его и использовать: разрешить ему работать. Кто-нибудь знает, почему это?
Примечание. У меня есть остальная часть PDO, правильно настроенная с использованием других переменных (не строк), я просто не включил ее, потому что это не нужно.
Любая помощь приветствуется, спасибо.
То, что говорится в комментариях, является правильным. Вот как я это делал раньше.
В основном вы создаете IN
часть строки sql, зацикливая значения массива и добавляя имя с привязкой.
$allow = array( 'red', 'blue' ); $sql = sprintf( "Select * from colors where type in ( %s )", implode( ',', array_map( function($v) { static $x=0; return ':allow_'.$x++; }, $allow ) ) );
Это приводит к Select * from colors where type in ( :allow_0,:allow_1 )
Затем просто зациклируйте массив $allow
и используйте bindValue для привязки каждой переменной.
foreach( $allow as $k => $v ){ $stmnt->bindValue( 'allow_'.$k, $v ); }
Я добавил это, прежде чем осознать, что уделено совпадение с вопросом, который дал аналогичный пример. Я оставляю это здесь, потому что он показывает, как это сделать с помощью имен связанных переменных и не?
Функции связывания будут рассматривать весь список как строку, а не несколько дискретных значений.