MySQL Query falsch
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anrichten
check
code
date
datenbank
fehlen
http
manual
ordern
post
problem
schaden
server
show
spalten
string
syntax
tun
typ
zeile
-
Hallo,
habe ein Problem bei meinem PHP-Script, bzw. an einem MySQL-Query.
$sql = \"INSERT INTO linktausch( sitename, sitedescription, siteurl, bannerurl, linkername, linkeremail, date, ip, show ) VALUES( \'\".$_POST[\'sitename\'].\"\', \'\".$_POST[\'sitedescription\'].\"\', \'\".$_POST[\'siteurl\'].\"\', \'\".$_POST[\'bannerurl\'].\"\', \'\".$_POST[\'linkername\'].\"\', \'\".$_POST[\'linkeremail\'].\"\', \'\".date(\"r\").\"\', \'\".$_SERVER[\'REMOTE_ADDR\'].\"\', \'0\' )\"; mysql_query($sql) OR die(\"Error: \". mysql_error());
Error: 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 \'show) VALUES( \'\', \'\', \'http://\', \'http://\', \'\',\' at line 2
Kann mir jemand sagen was daran nicht stimmt?
Die POST-Variablen werden alle übergeben, zum Großteil aber leer, doch das dürfte ja nichts machen, oder?
PS.: Ich weiß da fehlen noch einige Überprüfungen, ...
Edit: Wenn ich $sql ausgebe kommt folgendes:
INSERT INTO linktausch( sitename, sitedescription, siteurl, bannerurl, linkername, linkeremail, date, ip, show ) VALUES( \'\', \'\', \'http://\', \'http://\', \'\', \'\', \'Tue, 06 May 2008 20:28:31 +0200\', \'127.0.0.1\', \'0\' )
Beitrag geändert: 6.5.2008 20:28:47 von philippkern
EDIT2: Hat sich erledigt.
show ist ein spezielles Keyword von MySQL, thx.
Beitrag geändert: 6.5.2008 20:39:10 von philippkern -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich gehe mal davon aus das dein DateFeld ein DateTime Typ ist und entsprechend ist im Query dein Date auch falsch.
Nein.
`date` VARCHAR(40) NOT NULL ,;) -
Prüf mal dringend noch deine POST-Variablen per mysql_real_escape_string bevor du sie in den String einbaust. Sonst kann man sehr leicht an deiner Datenbank viel Schaden anrichten und auch alle Einträge lesen.
Ich weiß das da noch einige Überprüfungen fehlen, aber wenn ich $sql vorher mit mysql_real_escape_string bearbeite dann funkiert es wegen meinen Einrückungen im Query nicht.
Warum, das müsste doch egal sein?
Edit: OK, ich seh schon, jetzt muss ich sprintf() verwenden
Beitrag geändert: 7.5.2008 8:50:15 von philippkern -
Die Einrückungen sollten keinerlei Probleme machen. In den Queries die ich im Job an den Server schicke - häufig über PHP generiert - sind noch viel mehr Einrückungen und trotz mysql_real_escape funktioniert es.
Trotzdem komisch das der Query nicht funktioniert. -
Hier mal die wichtigsten Scriptteile bezüglich des mysql_real_escape_string:
$sql = \"SELECT sitename, sitedescription, siteurl, bannerurl FROM linktausch WHERE showsite = \'1\' ORDER BY id ASC\"; $result = mysql_query(mysql_real_escape_string($sql)) OR die(\"Error: \".mysql_error());
Das gibt folgenden Error aus:
Error: 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 \'\\r\\n sitename, sitedescription, siteurl, bannerurl \\r\\n FROM \\r\\n linktausc\' at line 1
Was stimmt daran nicht? -
mysql_real_escape wendet man nur auf die jeweiligen dynamischen Werte an. Wie zb. die übergebene ID. Aber niemals über den gesamten Query!
-
mysql_real_escape wendet man nur auf die jeweiligen dynamischen Werte an. Wie zb. die übergebene ID. Aber niemals über den gesamten Query!
Vielen Dank, hab nicht so genau geschaut auf was das gehört. thx
ryanblack schrieb:
Ich weiß nicht, ob das relevant ist, aber vll könntest du den ganzen Query in eine Zeile schreiben und die Tabellennamen und Spalten namen in ` und ` tun.
Also:
$sql = \\\'SELECT `sitename`, `sitedescription`, `siteurl`, `bannerurl` FROM `linktausch` WHERE `showsite` = \\\'1\\\' ORDER BY `id` ASC\\\';
Ryan
Ja, aber dann würden noch die \' \' stören.
Aber das mit mysql_real_escape_string war eh nich richtig, so wie ich es verwendet hab. ;) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage