У меня есть строка идентификаторов, таких как 1,2,3,4,5, и я хочу иметь возможность перечислять все строки в mysql, где идентификатор содержится в этом списке.
Я предположил, что самым простым способом было бы превратить строку в массив, а затем совместить в ($ array), но она не работает для меня – никаких ошибок и т. Д., Но она не возвращает строк:
$string="1,2,3,4,5"; $array=array_map('intval', explode(',', $string)); $query=mysqli_query($conn, "SELECT name FROM users WHERE id IN ('".$array."')");
Если я делаю var_dump массива $, я получаю:
array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }
Любая идея, где я напортачиваюсь?
$string="1,2,3,4,5"; $array=array_map('intval', explode(',', $string)); $array = implode("','",$array); $query=mysqli_query($conn, "SELECT name FROM users WHERE id IN ('".$array."')");
Ваш запрос переводится на:
SELECT name FROM users WHERE id IN ('Array');
Или что-то в этом влияют.
Вместо этого попробуйте использовать подготовленные запросы:
$numbers = explode(',', $string); $prepare = array_map(function(){ return '?'; }, $numbers); $statement = mysqli_prepare($link , "SELECT name FROM users WHERE id IN ('".implode(',', $prepare)."')"); if($statement) { $ints = array_map(function(){ return 'i'; }, $numbers); call_user_func_array("mysqli_stmt_bind_param", array_merge( array($statement, implode('', $ints)), $numbers )); $results = mysqli_stmt_execute($statement); // do something with results // ... }
+ Изменить
$array=array_map('intval', explode(',', $string));
Для того, чтобы:
$array= implode(',', array_map('intval', explode(',', $string)));
array_map возвращает массив, а не строку. Вам нужно преобразовать массив в строку, разделенную запятой, для использования в предложении WHERE.