vacio multidimensional llenar imprimir functions elementos elemento ejemplos declarar buscar array agregar php sql arrays in-operator

multidimensional - ¿Cómo usar php array con el operador sql IN?



llenar array multidimensional php (12)

Tengo una matriz con dos valores y quiero usarla con el operador IN de SQL en la consulta de selección.

Aquí está la estructura de mi mesa.

id comp_id 1 2 2 3 3 1

Tengo una matriz $arr que tiene dos valores Array ( [0] => 1 [1] => 2 )

Quiero recuperar el registro de comp_id 1 y comp_id 2. Así que escribí la siguiente consulta.

SELECT * from table Where comp_id IN ($arr)

Pero no devuelve los resultados.


$ arr es una matriz php, al servidor SQL que necesita enviar una cadena que se analizará, necesita convertir su matriz en una lista como 1, 2, etc.

Para hacer esto puedes usar la función http://php.net/implode

así que antes de ejecutar la consulta intente

$arr = implode ( '', '', $arr);


Debe convertir la matriz en una cadena para utilizarla en la consulta:

$list = implode('','', $arr);

Entonces se puede utilizar en la cláusula IN:

SELECT * from table Where comp_id IN ($list)


Está mezclando PHP y SQL; para el operador IN SQL, necesita un formato como:

SELECT * from table WHERE comp_id IN (1,2)

Entonces para obtener eso en PHP necesitas hacer algo como:

$sql = "SELECT * from table Where comp_id IN (".implode('','',$arr).")"

Tenga en cuenta que esto solo funciona si la matriz se compone de enteros. Tienes que escapar de cada elemento si son cadenas.


Existen algunos riesgos de inyección SQL en algunas de las respuestas anteriores. Podría estar bien si está completamente seguro de que $arr está siendo saneado (y seguirá siéndolo). Pero si no está completamente seguro, es posible que desee mitigar ese riesgo utilizando $stmt->bindValue . Aquí hay una forma de hacerlo:

# PHP $in_list = array(); for ($i = 0; $i < count($arr); $i++) { $key = ''in_param_'' . i; $in_list['':'' . $key] = array(''id'' => $arr[$i], ''param'' => $key); } $keys = implode('', '', array_keys($in_list)); // Your SQL ... $sql = "SELECT * FROM table where id IN ($keys)"; foreach ($in_list as $item) { $stmt->bindValue($item[''param''], $item[''id''], PDO::PARAM_INT); } $stmt = $this->getConnection()->prepare($sql)->execute();


Necesitas algo como:

$sql = "SELECT * from table where comp_id in (".implode('','',$arr.")";


Necesitas convertir tu $arr en una cadena. La forma más sencilla con lo que estás haciendo sería usar implode()

$query = ''SELECT * from table Where comp_id IN ('' . implode('','', $arr) . '')'';

Ahora mismo, si hace un echo su consulta verá que en lugar de que la matriz esté en la declaración IN , solo será la palabra "Matriz"


Necesitas implosionar tu matriz con '','' coma

$imploded_arr = implode('','', $arr); SELECT * from table Where comp_id IN ($imploded_arr)


Según la respuesta de @barryhunter que funciona solo en una matriz que contiene solo números enteros:

$sql = "SELECT * from table Where comp_id IN (".implode('','',$arr).")";

He hecho algunos ajustes para que funcione con una serie de cadenas:

$sql = "SELECT * from table Where comp_id IN (''".implode("'',''",$arr)."'')";


Todas las personas aquí están proponiendo lo mismo, pero recibí una advertencia en WordPress debido a un simple error. Necesitas agregar comas a tu cadena implosionada. Para ser precisos algo como esto.

$query = "SELECT *FROM table Where comp_id IN ( ''" . implode( "'', ''", $sanitized_brands ) . "'' )";

Espero que ayude a alguien como yo. :)


necesitas convertir la matriz en una cadena separada por comas:

$condition = implode('', '', $arr);

Y, además, es posible que desee escapar de los valores primero (si no está seguro de la entrada):

$condition = implode('', '', array_map(''mysql_real_escape_string'', $arr));


solo puede pasar una cadena a mysql como consulta, así que intente esto

mysql_query("SELECT * FROM table WHERE comp_id IN (".implode('','',$arr).")");


$sql = "SELECT * from table Where comp_id IN (".implode('','',$arr).")";