2012-03-08 14 views
20

Tengo una matriz con dos valores y quiero usarla con el operador sql IN en la consulta de selección.¿Cómo usar la matriz php con el operador sql IN?

Aquí es la estructura de mi mesa

id comp_id 
1 2 
2 3 
3 1 

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

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

SELECT * from table Where comp_id IN ($arr) 

Pero no devuelve los resultados.

+3

El paso 1 es depurar su propio código. Si imprimió la consulta que estaba enviando a MySQL, verá que 'SELECT * de la tabla donde comp_id IN (Array)' no es correcto. Intentar concatenar una matriz a una cadena no la convierte automáticamente en una lista de palabras separadas por comas. –

+4

Paso 2 es buscar SO para saber cuántos miles de veces ya se ha respondido a esta pregunta –

+0

Respondí sobre este problema, también resolverá su problema. http://stackoverflow.com/questions/920353/can-i-bind-an-array-to-an-in-condition/36070527#36070527 – 4EACH

Respuesta

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

Utilicé este método y funciona bien pero con una advertencia de 'Advertencia : implode() [function.implode]: argumentos inválidos pasados ​​en C: \ wamp \ www \ x \ x \ x \ xxx.php en la línea 81' – Ahmad

+1

@Ahmad Su '$ arr' probablemente no sea una matriz. Verifique que lo está construyendo correctamente. – jprofitt

+2

Recuperará el mismo resultado pero no es la mejor respuesta, descubrió que los ataques de inyección SQL, que respondí sobre este problema, también resolverá su problema. http://stackoverflow.com/questions/920353/can-i-bind-an-array-to-an-in-condition/36070527#36070527 – 4EACH

4

$ matriz es una matriz PHP, el servidor SQL que necesita enviar una cadena que será analizado que necesita para convertir su matriz en una lista como 1, 2, etc ..

para ello se puede utilizar la función http://php.net/implode

por lo que antes de ejecutar la consulta tratar

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

Utilicé este método y funciona bien pero con una advertencia de 'Advertencia: implode() [función.implode]: argumentos inválidos pasados ​​en C: \ wamp \ www \ x \ x \ x \ xxx.php en la línea 81' – Ahmad

+0

@Ahmad eso es extraño ... ¿tal vez para un caso en el que no tienes elementos en esa matriz o la variable aún no se ha inicializado ...? – mishu

+0

Ver mi comentario arriba. Esto no funciona para valores de cadena en la matriz. – CXJ

12

es necesario convertir la matriz en cadena separada por comas:

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

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

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

Es necesario hacer implosión de su matriz con '' coma

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

SELECT * from table Where comp_id IN ($imploded_arr) 
2

Usted necesita algo así como:

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

Necesita convertir realmente su $arr en una cadena. La forma más sencilla de lo que está haciendo es utilizar implode()

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

En este momento si la consulta echo verá que en lugar de la matriz de estar en la declaración IN, será sólo la palabra " matriz"

2

es necesario convertir la matriz de una cadena para su uso en la consulta:

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

a continuación, se puede utilizar en la cláusula IN:

SELECT * from table Where comp_id IN ($list) 
+0

que no funcionan para valores de cadena, ya que con la implosión obtiene uno cadena y valores de cadena no separados según sea necesario para la consulta sql –

+0

respuesta correcta está aquí http://stackoverflow.com/questions/18072185/formatting-a-php-array-for-an-sql-in-clause –

3

Estás PHP y SQL mezcla - para el operador IN SQL, es necesario un formato como:

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

Así que para conseguir que en PHP que tiene que 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.

3

Sólo puede pasar cadena a MySQL como consulta, a fin de tratar este

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

Todas las personas aquí están proponiendo lo mismo, pero me dieron una advertencia en WordPress debido a un error simple. Necesita agregar comas a su cadena implosionada. Para ser preciso algo como esto.

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

Espero que ayude a alguien como yo. :)

Cuestiones relacionadas