2009-07-01 2 views
1

HALLO,ORDER BY Datum während auch LIMIT in einer Abfrage MySQL - PHP

Ich kann nicht ganz diese heraus, ich versuche, Aufzeichnungen von MySQL zu ziehen, bestellen sie Reverse-chronologisch und die Ergebnisse begrenzen zu vier pro Seite (und Seitenumbruch verwenden, um die Seiten zu organisieren). Es wird zur Zeit der Rückkehr dieser Fehler:

Fatal error: SQL in /Users/allan/Sites/4is_site/casestudylist.php on line 126

$limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page; 
$query = "SELECT * FROM studies ORDER BY date desc WHERE niche = '{$_GET['niche']}' $limit"; 

Die Paginierung gearbeitet hat, in Ordnung, nur jetzt, dass ich Ich habe versucht, die ORDER BY hinzuzufügen, dass ich Probleme bekomme.

+0

Auch ich habe gehört, dass ich diesem entkommen muss: '{$ _GET [' Nische ']}', wie mache ich das? – user96828

Antwort

8

Diese Syntax ist falsch. Das sollte funktionieren.

$escapedNiche = mysql_real_escape_string($_GET['niche']); 
$query = "SELECT * FROM studies WHERE niche = '$escapedNiche' ". 
     "ORDER BY date DESC $limit"; 

Für die Zukunft - SELECT Syntax

0

BTW _GET [ 'Nische'] $ zu entkommen:

$clean_niche = mysql_escape_string($_GET['niche']); 
$limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page; 
$query = "SELECT * FROM studies " 
     ."WHERE niche = '{$clean_niche}' " 
     ."ORDER BY date desc $limit"; 

Diese Sie von SQL-Injection-Angriffe in $ die Zeichen schützen helfen durch die Flucht _GET ['Nische'].

Um zusätzliche Sicherheit zu gewährleisten, sollten Sie gebundene Parameter (google'em) und/oder Bibliotheksfunktionen wie Zend DB verwenden, um auf die Datenbank zuzugreifen.

+0

mysql_escape_string bereinigt nur die Eingabe, wenn die Eingabe von Anführungszeichen umgeben ist. Um ein Limit zu bereinigen, können Sie überprüfen, ob der Parameter 'Nische' eine Ganzzahl ist, die is_numeric() verwendet. – diedthreetimes