Я пытаюсь передать массив в $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 );