Anführungzeichen, Hochkomma, ... ???
Ralf König
- php
2 Bademeister- datenbank
0 Ralf König0 ChrisB0 henman
1 Bademeister
1 ChrisB
Ich werde noch irre!
$sql="SELECT frage, fid FROM fragen WHERE hkid=".$hkid;
funktioniert *nach stundenlangem rumgefummel!
$sql="SELECT frage, fid FROM fragen WHERE hkid=".$hkid."and ukid=".$ukid;
funktioniert nicht! *grrrrr!!!
Kann mir bitte mal jemand sagen
a) wo welches Anführungszeichen, Punkt oder was auch immer im obigen fehlt/falsch gesetzt ist?
b) wie die Regeln für derartiges lauten? Wann Anführungszeichen? Wann Hochkomma? Wann einen Punkt vor die Variable usw.?
Danke!
Hi Ralf.
$sql="SELECT frage, fid FROM fragen WHERE hkid=".$hkid."and ukid=".$ukid;
funktioniert nicht! *grrrrr!!!
Was funktioniert nicht? Die Konkatenation der Werte oder die Zuweisung an die Variable $sql?
Ich vermute mal: weder noch, sondern die Ausführung des SQL-Querys. Ich schlage vor:
1.: Lass Dir mal den String $sql ausgeben. Dir wird mit einem Blick auffallen, dass es kein gültiges SQL-Statement ist. Wahrscheinlich fehlen da Anführungszeichen (je nachdem, ob die Werte $hkid und $ukid Strings oder Spaltennamen sind) - was aber in jedem Fall fehlt und das Statement syntaktisch kaputt macht, ist was ganz anderes.
2.: Schreibe Dir auf ein (ggf. elektronisches) Blatt Papier *exakt* das SQL-Statement auf, das Du haben möchtest. Dann vergiss, dass es ein SQL-Statement ist, und versuche, in PHP diesen gewünschten String zu produzieren. Erst dann hast Du überhaupt ein PHP-Problem (oder auch schon nicht mehr), bisher hast Du keines, sondern eines in SQL.
Übrigens: Wenn ich richtig liege und die DB-Anfrage schief geht, dann hätte Dir die Fehlermeldung der DB exakt die Stelle genannt, an der Dein Statement den Pfad der SQL-Tugend verlässt. Das wäre leichter gewesen, als hier im Forum zu fragen ;-)
Viele Grüße,
der Bademeister
funktioniert nicht! *grrrrr!!!
Was funktioniert nicht? Die Konkatenation der Werte oder die Zuweisung an die Variable $sql?
Ich vermute mal: weder noch, sondern die Ausführung des SQL-Querys. Ich schlage vor:
1.: Lass Dir mal den String $sql ausgeben.
SELECT frage, fid FROM fragen WHERE hkid=3and ukid=1
--> Der Fehler ist/war demnach: Es fehlte ein Leerzeichen, das *and* klebte an der 3. *Ich hatte mir das zuvor zwecks Fehlersuche auch schon (öfter) ausgegeben, so ist es ja nicht - ich muss das klebende *and* schlichtweg übersehen haben! *Uhrzeit! ...
Übrigens: Wenn ich richtig liege und die DB-Anfrage schief geht, dann hätte Dir die Fehlermeldung der DB exakt die Stelle genannt, an der Dein Statement den Pfad der SQL-Tugend verlässt. Das wäre leichter gewesen, als hier im Forum zu fragen ;-)
Hättest Du den obigen Fehler anhand der Fehlermeldung erkannt?
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 'ukid=1' at line 1 --- wobei besagte Zeile in Zeile 17 steht!
So oder so:
DANKE!!!!
Hi,
Hättest Du den obigen Fehler anhand der Fehlermeldung erkannt?
Abgesehen davon, dass er bei etwas aufmerksamem Hinschauen schon ohne Fehlermeldung offensichtlich war -
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 'ukid=1' at line 1 --- wobei besagte Zeile in Zeile 17 steht!
Wenn MySQL einen Fehler „near xyz” meldet, dann befindet er sich meistens direkt vor xyz.
MfG ChrisB
hallo,
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 'ukid=1' at line 1 --- wobei besagte Zeile in Zeile 17 steht!
Wenn MySQL einen Fehler „near xyz” meldet, dann befindet er sich meistens direkt vor xyz.
... und 'at line 1' ist korrekt, denn die Fehlermeldung sagt, dass die SQL-Syntax fehlerhaft ist. Sie bezieht sich nur auf den query, in dem der Fehler auftritt.
grüße,
henman
Hättest Du den obigen Fehler anhand der Fehlermeldung erkannt?
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 'ukid=1' at line 1
Natuerlich haette ich das. SQL-Syntax-Fehlermeldungen sind anfangs etwas gewoehnungsbeduerftig, weil sie immer diesen laestigen und immer gleichen Satz haben, bevor ganz am Ende mal die interessante Stelle kommt. Aber sie kommt, und sie sagt praezise, wo der Fehler ist. Ggf. ist es ein Folgefehler, so dass man von da etwas zurueckgehen muss, aber es ist kein Hexenwerk, eine Fehlermeldung zu lesen und die Information, die drinsteht, auch wahrzunehmen.
--- wobei besagte Zeile in Zeile 17 steht!
Nein. Du meinst vermutlich, dass die Zeile
$sql="SELECT frage, fid FROM fragen WHERE hkid=".$hkid."and ukid=".$ukid;
(oder evtl. spaeter die Zeile, die in etwa
mysqli_query($sql);
lautet)
in Zeile 17 Deines PHP-Skriptes steht? Das kann sein, aber es hat nicht das geringste mit dem Fehler zu tun, der im DBMS auftritt.
Von PHP-Seite ist hier alles korrekt: $sql wird ein String zugewiesen, der wird spaeter als Parameter an eine Funktion (etwa mysqli_query) uebergeben, diese Funktion macht irgendwas, gibt dann false zurueck, und weder PHP-Parser noch Interpreter haben das geringste an Deinem Skript zu beanstanden. Nur das DBMS beanstandet einen Syntaxfehler in dem (einzeiligen) Skript, das es von Deinem PHP-Prozess zur Verarbeitung geschickt bekommen hat. Also ist der Fehler in Zeile 1.
Viele Gruesse,
der Bademeister
Hi,
$sql="SELECT frage, fid FROM fragen WHERE hkid=".$hkid;
funktioniert *nach stundenlangem rumgefummel!$sql="SELECT frage, fid FROM fragen WHERE hkid=".$hkid."and ukid=".$ukid;
funktioniert nicht! *grrrrr!!!Kann mir bitte mal jemand sagen
a) wo welches Anführungszeichen, Punkt oder was auch immer im obigen fehlt/falsch gesetzt ist?
Kannst du uns bitte sagen, warum du nicht mal ansatzweise eigenes sinnvolles Debugging betreibst, bevor du fragst?
Lass dir die generierte Query zur Kontrolle ausgeben.
Und frage im Zweifelsfalle die Datenbank, welches Problem sie mit deiner Query hat, anstatt nur achselzuckend „funzt nich” zu konstatieren - dafür gibt es mysql_error().
b) wie die Regeln für derartiges lauten? Wann Anführungszeichen? Wann Hochkomma? Wann einen Punkt vor die Variable usw.?
Das kannst du in den Handbüchern der verwendeten Sprachen/Techniken (hier also in erster Linie PHP und MySQL) nachlesen.
Kenntnis der Syntax gehört zum *absoluten* Grundlagenwissen.
(Und je nachdem, wo die Werte, die du in deine Queries einfügst, her kommen, möchtest du dich ggf. auch noch zum Stichwort SQL Injection informieren.)
MfG ChrisB