/ / Mysql donde id está en la matriz [duplicado] - php, mysql, arrays, explode

Mysql donde id está en la matriz [duplicado] - php, mysql, arrays, explode

Tengo una cadena de identificadores como 1,2,3,4,5 y quiero poder listar todas las filas en mysql donde el ID está contenido en esa lista.

Asumí que la forma más sencilla sería convertir la cadena en una matriz y luego hacer coincidir en ($ matriz), pero no me funciona, no hay errores, pero no devuelve filas:

$string="1,2,3,4,5";
$array=array_map("intval", explode(",", $string));
$query=mysqli_query($conn, "SELECT name FROM users WHERE id IN ("".$array."")");

Si hago un var_dump de $ array obtengo:

array(5) {
[0]=> int(1)
[1]=> int(2)
[2]=> int(3)
[3]=> int(4)
[4]=> int(5)
}

¿Alguna idea de donde estoy jodiendo?

Respuestas

19 para la respuesta № 1
$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."")");

6 para la respuesta № 2

Su consulta se traduce a:

SELECT name FROM users WHERE id IN ("Array");

O algo a ese afecto.

Trate de usar consultas preparadas en su lugar, algo como

$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
// ...
}

1 para la respuesta № 3

Cambio

$array=array_map("intval", explode(",", $string));

A:

$array= implode(",", array_map("intval", explode(",", $string)));

array_map devuelve una matriz, no una cadena. Debe convertir la matriz en una cadena separada por comas para usarla en la cláusula WHERE.