2011-07-07 14 views
7

Código:MySQL DONDE EN matriz de cadenas/nombre de usuario

$friendsArray = array("zac1987", "peter", "micellelimmeizheng1152013142"); 
$friendsArray2 = join(', ',$friendsArray); 
$query120 = "SELECT picturemedium FROM users WHERE username IN ('$friendsArray2')"; 
echo $query120; 

Ésta es la salida:

SELECT picturemedium FROM users WHERE username IN ('zac1987, peter, micellelimmeizheng1152013142') 

Se produce un error porque los nombres de usuario no están envueltos por comillas simples como 'zac1987', 'Peter', 'ratones...'. ¿Cómo se puede envolver cada nombre de usuario con comillas simples?

+0

considerar la adición de la etiqueta Perl o PHP a esta pregunta para llegar a una mayor audiencia – tomlogic

Respuesta

11

Echemos un vistazo a cada nombre uno por uno, escapando de cada uno.

Voy a recomendar que utilice una función de escape de MySQL real en lugar de simplemente ajustar las comillas, para garantizar que los datos entren realmente en la consulta correctamente. (De lo contrario, si ingresé un nombre como It's me!, la comilla simple estropearía la consulta.) Voy a suponer aquí que está usando PDO (¡lo cual debería!), Pero, de lo contrario, reemplace las referencias a PDO::quote con mysql_real_escape_string.

foreach($friendsArray as $key => $friend) { 
    $friendsArray[$key] = PDO::quote($friend); 
} 

$friendsArray2 = join(', ', $friendsArray); 
+0

He probado mysql_real_escape_string, la salida sigue siendo la misma que 'zac1987, peter, micellelimmeizheng1152013142' – zac1987

+1

Sí, ese debería ser el caso aquí. Lo que necesitas es '$ friendsArray [$ key] =" '".mysql_real_escape_string ($ friend)."' ";'. –

+0

¡GUAU! ¡¡Funciona!! Muchas gracias :) – zac1987

6

Encontré esta pregunta en Google y al hacerlo encontré una solución. No estoy seguro de cuán "adecuada" es esta solución, pero funcionó para mí.

$friendsArray = array("zac1987", "peter", "micellelimmeizheng1152013142"); 
    $friendsArray2 = "'" . join(', ',$friendsArray) . "'"; 
    $query120 = "SELECT picturemedium FROM users WHERE username IN ($friendsArray2)"; 
    echo $query120; 
+0

Tiene el mismo problema que también se presentó anteriormente. Verifique la respuesta de Matchu para una solución real. – Jasmo

+1

Esto parece tener un no agregar las comillas simples del medio. Creo que lo que Jeremy quiso publicar es: $ friendsArray2 = "'". join ("','", $ friendsArray). "'"; – useSticks

+0

Las comillas simples del medio faltan (en el caso de los números), deben ser '$ friendsArray2 =" '". join ("','", $ friendsArray). "'"; ' – Silvan

5

Todo es fácil si solo tiene números. Pero si tiene cadenas, debe verificar las comillas y tener cuidado. Si no quiere usar PDO o "mysql_real_escape_string", el siguiente código es correcto. Probé, esto funciona bien.

$friendsArray = array("zac1987", "peter", "micellelimmeizheng1152013142"); 
$friendsArray2 = '"' . implode('","', $friendsArray) . '"'; 
$query120 = "SELECT picturemedium FROM users WHERE username IN ($friendsArray2)"; 
echo $query120; 
0

Acaba de hacer algo muy similar. Esta es una forma muy simple de hacerlo que descubrí después de mucho dolor de cabeza.

$friendsArray = array("zac1987", "peter", "micellelimmeizheng1152013142"); 
$friendsArray2 = implode("','",$friendsArray); 

esto añadirá cotizaciones entre cada elemento de la matriz, pero no en el comienzo o el final Por lo tanto: $ friendsArray2 = "zac1987' , 'Peter', 'micellelimmeizheng1152013142" por lo que ahora todo te falta es la comilla simple antes de z en zac1987 y al final después de 3142 para arreglar esto solo envuelve $ friendsArray2 entre comillas simples dentro de tu instrucción SELECT.

Ha sido probado, probado y verdadero.

$query120 = "SELECT picturemedium FROM users WHERE username IN ('$friendsArray2')"; 
echo $query120; 

SALIDA: picturemedium SELECT FROM usuarios WHERE nombre de IN ('zac1987', 'Peter', 'micellelimmeizheng1152013142')

6

Si no desea utilizar DOP o otras soluciones complicadas utilizar implosionar la función y todo está listo.

$friendsArray = array("zac1987", "peter", "micellelimmeizheng1152013142"); 
$friendsArray2 = "'" .implode("','", $friendsArray ) . "'"; 
$query120  = "SELECT picturemedium FROM users WHERE username IN ($friendsArray2)"; 
echo $query120; 

Solución: acabo de implosión su $friendArray por ',' eso es todo. ¡simple y llano! y está funcionando.

salida: SELECT picturemedium FROM users WHERE username IN ('zac1987','peter','micellelimmeizheng1152013142')