2011-07-07 12 views
7

Kod:mysql gdzie w tablicy ciąg/nazwa_użytkownika

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

To wyjście:

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

To nie dlatego, że nazwy użytkowników nie są zawinięte apostrofy jak 'zac1987', 'Piotr', "myszy ...". W jaki sposób każda nazwa użytkownika może być opakowana w pojedyncze cudzysłowy?

+0

Warto dodać tag Perl lub PHP na to pytanie, aby osiągnąć większa publiczność. – tomlogic

Odpowiedz

11

Przeszukujmy każde imię po kolei, po każdej z nich.

Zamierzam zalecić użycie rzeczywistej funkcji ucieczki MySQL, a nie tylko zawijanie cytatów, aby upewnić się, że dane faktycznie trafiają do zapytania poprawnie. (W przeciwnym razie, jeśli wprowadziłbym nazwę taką jak It's me!, pojedynczy cytat zepsułby zapytanie.) Zakładam tutaj, że używasz PDO (co powinieneś!), Ale jeśli nie, zastąp odniesienia do PDO::quote z mysql_real_escape_string.

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

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

Przetestowałem mysql_real_escape_string, dane wyjściowe są nadal takie same jak "zac1987, peter, micellelimmeizheng1152013142 ' – zac1987

+1

Tak, tak powinno być w tym przypadku. To, czego potrzebujesz, to '$ friendsArray [$ key] =" '".mysql_real_escape_string ($ friend)."' ";'. –

+0

WOW! To działa!! Dziękuję bardzo :) – zac1987

6

Znalazłem to pytanie w Google i dzięki temu znalazłem rozwiązanie. Nie wiem, jak "właściwe" jest to rozwiązanie, ale zadziałało to dla mnie.

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

Ma ten sam problem, który jest również przedstawiony powyżej. Sprawdź odpowiedź Matchu na prawdziwe rozwiązanie. – Jasmo

+1

Wygląda na to, że nie dodajesz środkowych pojedynczych cudzysłowów. Wierzę, że Jeremy ma zamiar opublikować: $ friendsArray2 = "'". dołącz ("'," ", $ friendsArray). "" "; – useSticks

+0

Brakuje środkowych pojedynczych cudzysłowów (w przypadku liczb), powinno to być '$ friendsArray2 =" '". dołącz ("'," ", $ friendsArray). "" "; ' – Silvan

5

Wszystko jest proste, jeśli masz tylko cyfry. Ale jeśli masz ciągi znaków, musisz sprawdzić cytaty i zachować ostrożność. Jeśli nie chcesz używać PDO lub "mysql_real_escape_string", poniższy kod jest OK. Testowałem, to działa dobrze.

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

Po prostu musiałem zrobić coś bardzo podobnego. Jest to bardzo prosty sposób na zrobienie tego, który wymyśliłem po wielu bólach głowy.

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

to doda cudzysłowy pomiędzy każdego elementu tablicy, ale nie na samym początku lub na samym końcu Dlatego: $ friendsArray2 = „zac1987' ,«Piotr»," micellelimmeizheng1152013142" więc teraz wszystko brakuje ci pojedynczego cytatu przed z w zac1987 i na samym końcu po 3142 , aby to naprawić, po prostu zawiń $ friendsArray2 w pojedyncze cudzysłowy w ramach instrukcji SELECT.

Została wypróbowana, przetestowana i prawdziwa.

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

WYJŚCIE: SELECT picturemedium FROM uzytkownicy WHERE nazwa IN ('zac1987', 'Piotr', 'micellelimmeizheng1152013142')

6

Jeśli nie chcesz korzystać z PDO ani innych skomplikowanych rozwiązań korzystają funkcja implozji i wszyscy jesteście nastawieni.

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

Rozwiązanie: Właśnie implodowała swoją $friendArray przez ',' to wszystko. proste i proste! i działa.

Wyjście: SELECT picturemedium FROM users WHERE username IN ('zac1987','peter','micellelimmeizheng1152013142')