Fehler in der SQL-Syntax
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
anfrage
code
copyright
datenbank
datenschutz
ergebnis
fehler
feld
handbuch
http
impressum
kontakt
regeln
registrieren
registrierung
roman
syntax
versuchen
vorname
-
Huhu, ich habe gerade eine Fehlermeldung bekommen, mit der ich (trotz Google-Übersetzung) nicht so recht was anfangen kann:
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 \'\' at line 2
Google sagt mir dazu:
Sie haben einen Fehler in Ihrer SQL-Syntax, kontrollieren das Handbuch, das zu Ihrem MySQL-Server-Version für den richtigen Syntax zur Verwendung in der Nähe von\'\'at line 2
was denn für ein Handbuch und wo sollte ich da nachschauen ... Schuuuulhoooof? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Würde ich ja gern, aber ich weiß leider nicht, von welcher Zeile dieser Fehler mir berichtet ... da steht zwar at line 2, aber 1. füge ich eine .inc-Datei in der zweiten Zeile ein, in der keine \'\' vorkommen, sondern nur \"\" und 2. in der eingefügten inc-Datei sind in der zweiten Zeile auch keine \'\', sondern dort wird eine funkction (db_connect zum Verbinden mit der Datenbank definiert). Deswegen bin ich da gerade überfragt. Die ersten \'\' kommen erst bei
if(isset($_REQUEST[\'vorname\'])) { $vorname = $_REQUEST[\'vorname\']; }
aber diese stehen eben nicht in der 2. Zeile. -
Die Zeilenangabe bezieht sich nur auf den SQL-Code. Der Rest ist dabei egal. Versuch doch mal den Bereich einzugrenzen. Eventuell jede Abfrage nach der anderen Auskommentieren bis die Meldung verschwindet. Du kannst auch bei jede Abfrage auf Erfolg prüfen lassen.
$ergebnis = mysql_query ($sql);
if ($ergebnis != FALSE)
echo \"erfolg\";
else
echo \"hier ist der fehler\";
-
Also das bedeutet, bei der Datenbankverbindung etc., ja? Ich habe ja ein or die mit drin (Fehler bei der SQL-Anfrage) ... ah, dann könnte der Fehler eigentlich nur in diesem Bereich liegen:
function db_query($query) { $ergebnis=@mysql_query($query) or die (\"Fehler bei der SQL-Anfrage<br />\".mysql_error()); return $ergebnis; }
-
bitte bau mal vor dem die ein:
echo $query
das sollte dir die sql abfrage liefern die schief geht. -
An der Funktion dürfte es eher nicht liegen, sondern an einem übergebenen Query. Leider gibt mysql_error nicht immer so ganz den genauen Fehler zurück. Müsstest entweder mal alle Querys hier posten oder jeden einzeln bei PhpMyadmin ausprobieren. Irgendeiner müsste dann einen Fehler erzeugen.
-
Dann kann ich mir nur vorstellen, dass es an dieser Abfrage liegt:
$anfrage=\"SELECT id FROM user_registered WHERE user=\'\"; $anfrage.=$user; $anfrage.=\"\'\"; $ergebnis=db_query($anfrage);
Denn bei der hatte ich von Anfang an so meine Schwierigkeiten. \"id\" hieß zuvor \"id_registered\", aber da dies kein Feld in der Datenbank ist, habe ich es in \"id\" umgenannt ... ich hab die Daten ja aus einem Buch (versuche mich gerade zum ersten Mal an Sessions ran) und da stand das mit dem \"_registered\", obwohl ich mir daraus noch keinen Reim machen konnte. Denn schließlich ist das doch ein Feld in der Datenbank und wenn ein Feld \"id\" und nicht \"id_registered\" heißt, muss es doch auch \"id\" in der Abfrage heißen ... oder sehe ich das falsch? -
Die Felder in der Abfrage und in der DB müssen gleich sein, sonst findet MySQL die Tabellen nicht.
Bau Abfragen lieber so statt einen String einzeln zusammenzubauen, das ist übersichtlicher bei den \".
$anfrage = \"SELECT id FROM user_registered WHERE user = \'$user\'\";
$ergebnis = db_query($anfrage);
Deine Abfrage hat auch einen Fehler, eben so einen Fehler:
$anfrage=\"SELECT id FROM user_registered WHERE user=\'\";
$anfrage.=$user;
$anfrage.=\"\'\";
// $anfrage sieht jetzt so aus:
\"SELECT id FROM user_registered WHERE user=\'\"$user\'
Siehst dann schon was da fehlt.
Das $anfrage.=\"\'\"; müsste wenn dann so heißen: $anfrage.=\"\\\"\'\\\"\";
Dann kommt das raus:
\"SELECT id FROM user_registered WHERE user=\'\"$user\"\'\" und ist somit korrekt.
-
Hm, komisch, DAMIT hatte ich bei vorherigen Abfragen eigentlich keien Probleme gehabt ... aber gut, ich probier das mal :D
---
Edit:
Joa, scheint nun zu gehen ... hm, aber auch wieder nicht ganz :D
Denn wenn ich mich nun registrieren möchte, wozu dieses nette Formular und der Check danach ja da sind, folgt dies:
Fehler bei der SQL-Anfrage
Unknown column \'Aurora\' in \'where clause\'
Is klar, dass da nix steht in der Datenbank ... der soll das ja auch eintragen, wenn es nicht da ist ... bzw. erstmal in einer anderen Datenbank und dies habe ich hübsch (auch noch immer laut Buch, da ich mich ja erstmal reinfummseln wollte, ehe ich was eigenes draus bastel) in eine if-Abfrage gestopft. Aber nööö, mag es wohl nich :(
Beitrag geändert: 14.6.2008 23:46:02 von cam -
Da müsstest mal den ganzen Codebereich posten. So kann keiner sagen wo genau der Fehler ist.
-
den ganzen ... das ist aber verdammt viel, würd ich meinen oder nur die beiden if-Abfragen (bzw. bei der zweiten nur den entscheidenden Anfang)? Würde das schon helfen?
Hm, lange Frage, kurzer Sinn, ich post das hier mal, was ich mein und dann kann man mir ja immer noch sagen, ob das reicht oder nicht, gelle?
if(!empty($vorname)&&!empty($nachname)&&!empty($user)&&!empty($email)&&!empty($password)) { $db=db_connect(); $anfrage=\"SELECT id FROM user_registered WHERE user=\"; $anfrage.=$user; $anfrage.=\"\"; $ergebnis=db_query($anfrage); $anz=mysql_num_rows($ergebnis); if ($anz<1) { $anfrage=\"INSERT INTO user_new VALUES(0,\'\".$vorname.\"\',\'\".$nachname.\"\',\'\".$user.\"\',\'\".$password.\"\', \'\".$email.\"\',now()\"; db_query($anfrage); $id=mysql_insert_id($db);
-
Achso. Jetzt weiß ich was da noch falsch ist. Da ist etwas ein bisschen durcheinander.
Der Query muss entweder so
\"SELECT id FROM user_registered WHERE user=\'$user\'\"
oder so
\"SELECT id FROM user_registered WHERE user=\'\".$user.\"\'\" aussehen. Sonst geht das nicht richtig.
Für dein aufgeteiltes:
$anfrage=\"SELECT id FROM user_registered WHERE user=\';
$anfrage.=$user;
$anfrage.=\'\";
Ergibt dann meinen 1. Query. Müsste so jetzt richtig funktionieren. -
nich wirklich ... denn, auch beim aufgeteilten, muss jeder Anfrage-Teil vor dem Smikolon mit einem \" enden, damit es funzt ... dann wäre es demnach eigentlich richtig gewesen, so wie ich es hatte. Na ja, ich probiere das mal als Einheit, mal sehen, was dann bei rauskommt :D
---
Edit:
Jippi, dabei hätten wir Fehler 1 wieder ans Tageslicht gebracht :D ... war also doch das, was ich zuvor schon hatte. Wenn ich die \'\' weglasse, also nur
$anfrage=\"SELECT id FROM user_registered WHERE user=$user\";
schreibe, dann kommt wieder Fehler 2. Ich weiß jetzt, glaub ich, auch, weil eben diese \'\' fehlen und er denkt \"User\" muss den Inhalt $user haben ... aber dann verstehe ich nicht, warum die 1. Fehlermeldung kommt, die doch dann, logischer Denkweise zufolge, richtig wäre.
Beitrag geändert: 15.6.2008 0:37:08 von cam -
Normal muss beim WHERE der Vergleichswert in \' stehen. also user = \'$user\'.
Was du vorhin mal hattest war ja \'\"$user\"\'. Da ist also für PHP der String zuende und geht erst nach $user wieder weiter. Der Vergleich bleibt also Leer. user = \'\'
Da fehlt das richtige Zusammenfügen. user = \'\".$user.\"\' dann wird der String mit $user gefüllt, oder ohne String beenden wie in der ersten Zeile.
Der Query müsste eigentlich gehen:
$sql = \"SELECT id FROM user_registered WHERE user = \'$user\'\";
Sonst weiß ich auch nicht mehr was da los sein könnte. -
Wie gesagt, es haut mir jetzt die gleiche Fehlermeldung raus wie vorhin und meiner Meinung nach hatte ich es schon richtig gehabt (ist ja auch nicht wirklich wichtig jetzt) ... Die Frage ist und bleibt nur: Warum kommt diese Fehlermeldung, wenn jetzt alles richtig ist. Das will noch nicht so ganz in mein Schädelchen.
Kann es an einer anderen Stelle zu einem Fehler gekommen sein, den man hier noch nicht bedacht hat (weiter vorm im Script zum Beispiel, wo ich mit _REQUEST nach leeren Inhalten im Formular prüfe)? -
Deswegen meinte ich ja das ganze Script mal posten. Dann kann man sehen was mit den Variablen gemacht wurde. Aber mir fällt jetzt nichts mehr ein. Mal schauen ob ich da noch was finde. Poste auf jeden Fall mal alles, vielleicht findet wer anders auch was.
-
Okay, dann mach ich das mal ... hier ist es (die include-Datei habe ich dabei mal außer acht gelassen ;) )
<?php include(\"styles/db.inc\"); if(isset($_REQUEST[\'vorname\'])) { $vorname = $_REQUEST[\'vorname\']; } if(isset($_REQUEST[\'nachname\'])) { $nachname = $_REQUEST[\'nachname\']; } if(isset($_REQUEST[\'user\'])) { $user = $_REQUEST[\'user\']; } if(isset($_REQUEST[\'email\'])) { $email = $_REQUEST[\'email\']; } if(isset($_REQUEST[\'password\'])) { $password = $_REQUEST[\'password\']; } if(!empty($vorname)&&!empty($nachname)&&!empty($user)&&!empty($email)&&!empty($password)) { $db=db_connect(); $anfrage=\"SELECT id FROM user_registered WHERE user=$user\"; $ergebnis=db_query($anfrage); $anz=mysql_num_rows($ergebnis); if ($anz<1) { $anfrage=\"INSERT INTO user_new VALUES(0,\'\".$vorname.\"\',\'\".$nachname.\"\',\'\".$user.\"\',\'\".$password.\"\', \'\".$email.\"\',now()\"; db_query($anfrage); $id=mysql_insert_id($db); $txt=\"<html><head>\"; $txt.=\"<meta http-equic=\'Content-Type\' content=\'text/html;charset=iso-8859-1\'>\"; $txt.=\"</head><body>\"; $txt.=\"Vielen Dank für deine Registrierung beim Mitmach-Roman!<br />\"; $txt.=\"Um deine Registrierung zu aktivieren, klicke bitte den nachfolgenden Link an:\"; $txt.=\"<a href=\'http://cam.lima-city.de/mitmach-roman/activate.php?id=\".$id.\"\'>Aktivierung</a><br />\"; $txt.=\"Sollte der Link bei dir nicht funktionieren, kopiere die nachfolgende Adresse in deinen\"; $txt.=\" Web-Browser:<br />\"; $txt.=\"http://cam.lima-city.de/mitmach-roman/activate.php?id=\'.$id.\'\"; $txt.=\"</body></html>\"; mail($email, \"Aktivierung der Registrierung beim Mitmach-Roman\", $txt,\"Content-Type= txt/html\\nFrom: Administration Der Mitmach-Roman <buch@communityandmore.de>\"); print(\"<html>\"); print(\" <head>\"); print(\" <title>\"); print(\" Der Mitmach-Roman\"); print(\" </title>\"); print(\" <link href=\'styles/styles.css\' rel=\'stylesheet\' type=\'text/css\'>\"); print(\" </head>\"); print(\" <body bgcolor=\'#FFF8DC\'>\"); print(\" <div class=\'titel\'>\"); print(\" <img src=\'images/titel.gif\' align=\'center\' />\"); print(\" </div>\"); print(\" <div class=\'menue\'>\"); print(\" <p align=\'right\'>\"); print(\" <b>\"); print(\" <a href=\'regeln.php\' class=\'alles\'>Regeln</a>\"); print(\" |\"); print(\" <a href=\'copy.php\' class=\'alles\'>Copyrights & Datenschutz</a>\"); print(\" |\"); print(\" <a href=\'kontakt.php\' class=\'alles\'>Kontakt</a>\"); print(\" |\"); print(\" <a href=\'impressum.php\' class=\'alles\'>Impressum</a>\"); print(\" </b>\"); print(\" </p>\"); print(\" </div>\"); print(\" <div class=\'navi-rosa\'>\"); include(\"navi-rosa.php\"); print(\" </div>\"); print(\" <div class=\'navi-blau\'>\"); include(\"navi-blau.php\"); print(\" </div>\"); print(\" <div class=\'main\'>\"); print(\" <b>\"); print(\" Registrieren\"); print(\" </b>\"); print(\" <p align=\'justify\'>\"); print(\" Willkommen beim Mitmach-Roman! Du bist jetzt als neues Mitglied registriert. Um deine \"); print(\" Registrierung abzuschließen, musst du diese noch aktivieren. Dazu wurde dir eine\"); print(\" E-Mail geschickt. Bitte klicke den dort enthaltenen Link an.\"); print(\" </p>\"); print(\" </div>\"); print(\" </body>\"); print(\" </html>\"); } else { print(\"<html>\"); print(\" <head>\"); print(\" <title>\"); print(\" Der Mitmach-Roman\"); print(\" </title>\"); print(\" <link href=\'styles/styles.css\' rel=\'stylesheet\' type=\'text/css\'>\"); print(\" </head>\"); print(\" <body bgcolor=\'#FFF8DC\'>\"); print(\" <div class=\'titel\'>\"); print(\" <img src=\'images/titel.gif\' align=\'center\' />\"); print(\" </div>\"); print(\" <div class=\'menue\'>\"); print(\" <p align=\'right\'>\"); print(\" <b>\"); print(\" <a href=\'regeln.php\' class=\'alles\'>Regeln</a>\"); print(\" |\"); print(\" <a href=\'copy.php\' class=\'alles\'>Copyrights & Datenschutz</a>\"); print(\" |\"); print(\" <a href=\'kontakt.php\' class=\'alles\'>Kontakt</a>\"); print(\" |\"); print(\" <a href=\'impressum.php\' class=\'alles\'>Impressum</a>\"); print(\" </b>\"); print(\" </p>\"); print(\" </div>\"); print(\" <div class=\'navi-rosa\'>\"); include(\"navi-rosa.php\"); print(\" </div>\"); print(\" <div class=\'navi-blau\'>\"); include(\"navi-blau.php\"); print(\" </div>\"); print(\" <div class=\'main\'>\"); print(\" <b>\"); print(\" Registrieren\"); print(\" </b>\"); print(\" <p align=\'justify\'>\"); print(\" Der Nickname ist leider schon vergeben. Bitte versuche es erneut.\"); print(\" </p>\"); print(\" </div>\"); print(\" </body>\"); print(\" </html>\"); } db_close($db); } else { print(\"<html>\"); print(\" <head>\"); print(\" <title>\"); print(\" Der Mitmach-Roman\"); print(\" </title>\"); print(\" <link href=\'styles/styles.css\' rel=\'stylesheet\' type=\'text/css\'>\"); print(\" </head>\"); print(\" <body bgcolor=\'#FFF8DC\'>\"); print(\" <div class=\'titel\'>\"); print(\" <img src=\'images/titel.gif\' align=\'center\' />\"); print(\" </div>\"); print(\" <div class=\'menue\'>\"); print(\" <p align=\'right\'>\"); print(\" <b>\"); print(\" <a href=\'regeln.php\' class=\'alles\'>Regeln</a>\"); print(\" |\"); print(\" <a href=\'copy.php\' class=\'alles\'>Copyrights & Datenschutz</a>\"); print(\" |\"); print(\" <a href=\'kontakt.php\' class=\'alles\'>Kontakt</a>\"); print(\" |\"); print(\" <a href=\'impressum.php\' class=\'alles\'>Impressum</a>\"); print(\" </b>\"); print(\" </p>\"); print(\" </div>\"); print(\" <div class=\'navi-rosa\'>\"); include(\"navi-rosa.php\"); print(\" </div>\"); print(\" <div class=\'navi-blau\'>\"); include(\"navi-blau.php\"); print(\" </div>\"); print(\" <div class=\'main\'>\"); print(\" <b>\"); print(\" Registrieren\"); print(\" </b>\"); print(\" <p align=\'justify\'>\"); print(\" Deine Registrierung ist fehlgeschlagen! Um dich zu registrieren musst du das Formular\"); print(\" komplett ausfüllen. Bitte versuche es erneut.\"); print(\" </p>\"); print(\" </div>\"); print(\" </body>\"); print(\" </html>\"); } ?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage