MySQL sieht einen Fehler, den ich nicht sehe...
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
abfragen
anwenden
code
dank
date
datenbank
fehler
funktion
funktionieren
helfen
jemand
liegen
ordern
parameter
problem
syntax
tauschen
url
version
-
Die Fehlermeldung: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id =1' at line 13
Mein Code:
<?php error_reporting(0); include 'data.php'; include 'config.php'; mysql_connect($HOST,$USER,$PW)or die(mysql_error()); mysql_select_db($DB)or die(mysql_error()); $sql = "SELECT id, autor, title, news, date, description, keywords FROM wronnay_news ORDER BY date DESC WHERE id ={$_GET['id']}"; $result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error()); while ($row = mysql_fetch_assoc($result)) { $comments = mysql_num_rows(mysql_query("SELECT id FROM wronnay_news_comments WHERE news_id = '".$row['id']."'")); ?>
Kann mir jemand helfen? - Ich finde den Fehler nicht! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
webfreclan schrieb:
Kann mir jemand helfen? - Ich finde den Fehler nicht!
Ich weiß nicht in wiefern das wichtig ist, aber ich würde WHERE und ORDER BY tauschen und evtl das $_GET anders schreiben (denke das ist noch Gewohnheitssache funktionieren bestimmt beide Versionen), scheint mir zumindest das einzige zu sein wo der Fehler liegen könnte:
$sql = "SELECT id, autor, title, news, date, description, keywords FROM wronnay_news WHERE id = '".$_GET['id']."' ORDER BY date DESC";
Beitrag zuletzt geändert: 8.2.2012 16:20:12 von alfr3d -
verdreh mal das Oder by und Where
dann drfte es SQL - standart sein
(@quelle http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html)
mfg jongleur -
alfr3d hat den Fehler indirekt behoben, so würde es aber reichen:
ORDER BY muss an letzter Stelle stehen.$sql = "SELECT id, autor, title, news, date, description, keywords FROM wronnay_news WHERE id = {$_GET['id']} ORDER BY date DESC";
-
Und mit der ungefilterten Verwendung von $_GET['id'] ist jedem Angreifer Tür und Tor geöffnet.
-
Danke, Problem gelöst!
alfr3d schrieb:
webfreclan schrieb:
Kann mir jemand helfen? - Ich finde den Fehler nicht!
Ich weiß nicht in wiefern das wichtig ist, aber ich würde WHERE und ORDER BY tauschen und evtl das $_GET anders schreiben (denke das ist noch Gewohnheitssache funktionieren bestimmt beide Versionen), scheint mir zumindest das einzige zu sein wo der Fehler liegen könnte:
$sql = "SELECT id, autor, title, news, date, description, keywords FROM wronnay_news WHERE id = '".$_GET['id']."' ORDER BY date DESC";
-
hackyourlife schrieb:
webfreclan schrieb:
Du sollstest statt der direkten Übernahme des GET-Parameters die Funktion mysql_real_escape_string anwenden()! Ansonsten kann jeder ein beliebiges SQL-Kommando ausführen.
Danke, Problem gelöst!
Ok, hinzugefügt!
Beitrag zuletzt geändert: 8.2.2012 16:31:15 von webfreclan -
So reicht es:
$sql = "SELECT id, autor, title, news, date, description, keywords FROM wronnay_news WHERE id = ".mysql_real_escape_string($_GET['id'])." ORDER BY date DESC";
-
Wieso lasst Ihr immer ungeprüfte Abfragen auf eure Datenbanken los? mysql_real_escapestring () ist nicht die Lösung aller Problem.
hackyourlife schrieb:
So reicht es:$sql = "SELECT id, autor, title, news, date, description, keywords FROM wronnay_news WHERE id = ".mysql_real_escape_string($_GET['id'])." ORDER BY date DESC";
z.B. einfachste Prüfungen vorher:
$error = false ; if ( isset ( $_GET [ 'id' ] ) && is_numeric ( $_GET [ 'id' ] ) ) { $nID = mysql_real_escape_string ( $_GET [ 'id' ] ); } else { $error = true ; } if ( !$error ) { // .... }
Ist zwar bei einem numerischen ID relativ, aber wieso die SQL Abfrage ausführen, wenn sie sowieso nicht klappt?
Beitrag zuletzt geändert: 8.2.2012 20:18:02 von bdsg -
bdsg schrieb:
Wieso lasst Ihr immer ungeprüfte Abfragen auf eure Datenbanken los? mysql_real_escapestring () ist nicht die Lösung aller Problem.
[...]
z.B. einfachste Prüfungen vorher:
$error = false ; if ( isset ( $_GET [ 'id' ] ) && is_numeric ( $_GET [ 'id' ] ) ) { $nID = mysql_real_escape_string ( $_GET [ 'id' ] ); } else { $error = true ; } if ( !$error ) { // .... }
Ist zwar bei einem numerischen ID relativ, aber wieso die SQL Abfrage ausführen, wenn sie sowieso nicht klappt?
Das "is_numeric()" hätte gereicht, danach brauch man nichts mehr überprüfen, entweder es ist eine Zahl oder nicht... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage