MySQLi Bind Param с массивом для IN

Я пытаюсь передать массив в $stmt->bind_param для переменной IN. Как я могу это сделать?

 $values = array('a','b','c','d'); $values = '"' . implode('","', $values) . '"'; $stmt->prepare('SELECT value1, value2 FROM table1 WHERE value3 IN (?)'); $stmt->bind_param('s', $values); 

Я не могу заставить его работать на всю жизнь. Есть предположения? Вышеприведенный код является просто образцом.

Это сценарий, когда делать это таким образом неуместно. Вы строите фактический SQL (это то, что запятые и кавычки), и передавая его в качестве параметра. Это в основном оценка value3 IN ('...') где ... – это целое число $values .

Также это хороший звонок о котировках. MySQL использует одинарные кавычки.

Вам нужно либо построить SQL с помощью конкатенации строк, либо использовать несколько параметров.

РЕДАКТИРОВАТЬ

В качестве примера:

 $values = array('a','b','c','d'); $values = "'" . implode("','", $values) . "'"; $stmt->prepare('SELECT value1, value2 FROM table1 WHERE value3 IN (' . $values . ')'); 

Прошел через некоторую информацию (см. Также https://stackoverflow.com/a/13253440/165330 ).

Это может, но НЕ ДОЛЖНО быть сделано.

Чтобы это сделать, использовались бы динамические переменные для предоставления автоматических ссылочных переменных и с помощью call_user_func_array для предоставления динамического количества аргументов для метода обратного вызова / метода $ stmt-> bind_param ().

 <?php $values = array('a','b','c','d'); $s = substr( str_repeat( ' , ?' , count( $values ) ) , 2 ); $stmt->prepare('SELECT value1, value2 FROM table1 WHERE value3 IN (' . $s . ')'); # OR array_map in case of different datatypes $typeDefintions = str_repeat( 's' , count( $values ) ); $params = array( $typeDefinitions ); foreach ( $values as $k => $v ) { ${ 'varvar' . $k } = $v; $params[] = &${ 'varvar' . $k };# provide references } call_user_func_array( array( $stmt , 'bind_param' ) , $params );