2012-04-08 11 views
1

Ich habe PHP-Code aus Tutorial verwendet und es hat gut funktioniert. Aber wenn ich es neu schreibe, gibt es mir null. Dieser Code gibt mir, was ich will ich meine es Daten im JSON-Format gibt:php Select-Anweisung gibt keine Antwort

$q=mysql_query("SELECT * FROM people WHERE birthyear>'".$_REQUEST['year']."'"); 
while($e=mysql_fetch_assoc($q)) 
    $output[]=$e; 
print(json_encode($output)); 

Aber dieser Code selbst sieht es gleich nicht null funktioniert gibt:

$q=mysql_query("SELECT username, firstname, lastname, email, phone1, skype, city, description 
FROM mdl_user WHERE username LIKE'".$_REQUEST['usern']."'"); 
while($e=mysql_fetch_assoc($q)) 
    $output[]=$e; 
print(json_encode($output)); 

Wenn ich nicht tun benutze $ _REQUEST ['usern'] und erhalte Daten in JSON. Aber ich muss Anfrage verwenden, um bestimmte Daten zu suchen. Wo könnte das Problem liegen? Weil ich es vertraulich nicht verstehe. Es sieht genauso aus.

Antwort

0

Um ein Muster mit LIKE zu erstellen, verwenden Sie eine %. Lege es herum oder an irgendein Ende, Anfang oder Ende.

$username = mysql_real_escape_string($_REQUEST['usern']); 

$q=mysql_query("SELECT username, firstname, lastname, email, phone1, skype, city, description 
FROM mdl_user WHERE username LIKE '$username%'"); 
           ^
           | 
// You also missed this space --+ 

Hinweis Ihre Abfrage ist eine SQL-Injection weit offen. Denken Sie nur, wenn jemand Jahr als '; drop table people; -- einfügt. Verwenden Sie mysql_real_escape_string, um dieses Feld zu bereinigen.

enter image description here

Und es ist besser ausdrücklich _POST oder $ _GET $ zu verwenden, macht ths sicher, dass Ihre Daten von richtigen Quelle kommen.

+0

Oder noch besser verwenden Sie PDO, da es für Sie das Entkommen behandelt und die mysql_ Familie von Funktionen veraltet sind. – liquorvicar

-1

Ich nehme an, dass Sie kein Ergebnis erhalten, weil Ihr Benutzername nicht genau das gleiche wie $ _REQUEST ['usern'] ist, und deshalb verwenden Sie LIKE an erster Stelle. Daher sollten Sie Platzhalter platzieren MySQL zu sagen, für beliebige Zeichen zu suchen (%) vor oder nach der Zeichenfolge, zum Beispiel:

LIKE '%".$_REQUEST['usern']."%' 

Beachten Sie, dass dies ineffizient ist und Sie sollten versuchen, nur ein% zu verwenden, nachdem die Zeichenfolge (wenn dies für Sie funktioniert), oder noch besser, finden Sie eine andere Möglichkeit, die Tabelle zu durchsuchen.

Edit: Auch als ein Benutzer in den Kommentaren bemerkt und ich habe versäumt zu erwähnen, ist dieser bestimmte Code anfällig für SQL-Injektionen. Sie sollten die Variable $ _REQUEST ['usern'] bereinigen, bevor Sie sie an die Abfrage übergeben.

+0

Während dies funktionieren kann, werden Sie wahrscheinlich nicht wollen, den den Anguss offen zu halten, hier ... –

+0

Aber wie Jahr nicht funktioniert, wenn int-Typ ist Geburtsjahr? Jahreswert würde von Java-Programm gesendet werden. – LTnewbie

0

Mit LIKE können Sie die folgenden zwei Platzhalterzeichen im Muster verwenden.

% Matches any number of characters, even zero characters 
_ Matches exactly one character