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.