Rod: mysql: Fehlermeldung Syntaxfehler

Hi,

immer wieder mal bekomm ich eine Fehlermeldung folgender Art:

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 'all' at line 1

Immer wieder bekomm ich das auch irgendwie wieder hin, nur weiß ich jedesmal nicht, wo und wie und warum. *grr*

Kann mir mal einer diese Fehlermeldung näher erläutern, damit die Fehlerbehebung nicht mehr rein zuföllig geschieht?

Danke

Rod

  1. Hi,

    Immer wieder bekomm ich das auch irgendwie wieder hin, nur weiß ich jedesmal nicht, wo und wie und warum. *grr*

    das erfährst Du, indem Du vorher das - offenbar generierte - Statement ausgibst und dem Ratschlag der Fehlermeldung folgst.

    Kann mir mal einer diese Fehlermeldung näher erläutern, damit die Fehlerbehebung nicht mehr rein zuföllig geschieht?

    "In Deinem SQL-Statement ist ein Fehler, korrigiere die Syntax anhand der Doku Deines DBMS."

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Ich hab mir alles angesehen, in einem anderen Script verwende ich genau die gleiche Abfragesyntax und alles läuft prima...

      Rod

      1. Hallo Rod,

        Ich hab mir alles angesehen, in einem anderen Script verwende ich genau die gleiche Abfragesyntax und alles läuft prima...

        das habe ich mir auch schon des öfternen gedacht, irgendwo war da aber dann doch ein Fehlerchen :-)
        Aber ohne Query ist es etwas schwer zu sagen, was bei deinem falsch ist...

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Aber ohne Query ist es etwas schwer zu sagen, was bei deinem falsch ist...

          Argh :-) Isch wäd wahsinnisch!

          Was heißt denn : Laß Dir die Query anzeigen?

          Bitte. Und danke :_-)

          Rod

          1. Hallo,

            Was heißt denn : Laß Dir die Query anzeigen?

            Das, was in
            mysql_query()
            an erster Position steht, ist die "Query".

            Wenn Du es gut machst, stellst Du diese bereits vorher
            in einer String-Variable zusammen, z.B.

            $query="SELECT vorname, name FROM personen WHERE id=$id";

            Dann kannst Du sie in der eigentlichen DB-Abfrage brauchen:

            $result = mysql_query($query);

            Wenn es Probleme gibt, kannst Du sie anzeigen lassen:

            echo "Query: <code>$query</code>";

            So siehst Du meist, dass die Query einen Fehler drin hat,
            z.B. keine Anfuehrungszeichen um einen String.

            Sehr sinnvoll ist das in der routinemaessigen Fehlerkontrolle
            nach einer DB-Anfrage:

            $result = mysql_query($query);
            if (!$result)
              {
                echo "Datenbank-Problem:<br>";
                echo "Query: <code>$query</code><br>";
                echo "MySQL-Fehlermeldung:".mysql_error();
              }
            else
             {
               echo "Alles OK mit der Datenbank...";
               /* Weiterfahren... */
             }

            Alles klar?
            Gruesse,

            Thomas

            1. Hallo,

              Das, was in
              mysql_query()
              an erster Position steht, ist die "Query".

              Bei dieser sehr einfachen, aber handfesten "Definition" ging
              ich - wie im Rest des Postings - davon aus, dass Du
              mit einem PHP-Skript auf eine MySQL-Datenbank zugreifst.

              Falls nicht: Welche Programmiersprache und welches Datenbanksystem
              verwendest Du?

              mfg,

              Thomas

              1. Hallo,

                Das, was in
                mysql_query()
                an erster Position steht, ist die "Query".

                Hi Thomas,

                danke, hätte ich drauf kommen dürfen, finde ich :-) Ok, hier also meine Query mit etwas drum herum, damit der Zusammenhang gewahrt bleibt:

                if (!isset($sortiert_nach)) {
                  $sortiert_nach="";
                 }
                 if ($ID == "all") {
                  $where="";
                 }
                 else {
                  $where="where ID=$ID";
                 }
                 $db=mysql_connect($dbserver,$dbuser,$dbpasswd);
                 mysql_select_db($dbname,$db);
                 $result=mysql_query("select ID,Kundennummer,Firma,PLZ,Ort from Tabelle $where order by '$sortiert_nach'");

                Der Fehler hängt bestimmt mit den Anführungszeichen zusammen. Leider kenn ich die Regeln hierfür nicht und muß immer probieren :-(

                Bei dieser sehr einfachen, aber handfesten "Definition" ging
                ich - wie im Rest des Postings - davon aus, dass Du
                mit einem PHP-Skript auf eine MySQL-Datenbank zugreifst.

                Ja, genau so ist es.

                Falls nicht: Welche Programmiersprache und welches Datenbanksystem
                verwendest Du?

                Ab und an in Perl, aber hier geht es tatsächlich um PHP/mysql.

                Grüße zurück

                Rod

                mfg,

                Thomas

                1. Hi,

                  $result=mysql_query("select ID,Kundennummer,Firma,PLZ,Ort from Tabelle $where order by '$sortiert_nach'");

                  $query = "select ID,Kundennummer,Firma,PLZ,Ort from Tabelle $where order by '$sortiert_nach'";
                  echo $query;
                  $result = mysql_query($query);

                  Die mittlere Zeile ist Deine Debug-Ausgabe und so ziemlich das erste, was Du machst.

                  Der Fehler hängt bestimmt mit den Anführungszeichen zusammen.

                  Korrekt.

                  Leider kenn ich die Regeln hierfür nicht und muß immer probieren :-(

                  Nein, in der Doku nachlesen, denn dazu ist sie da. Die Faustregel "wenn String, dann Quotes" ist daraus wirklich nicht schwer zu extrapolieren - und im Zweifel schaue *immer* in der Doku nach, anstatt rumzuprobieren.

                  Cheatah

                  --
                  X-Will-Answer-Email: No
                  X-Please-Search-Archive-First: Absolutely Yes
                  1. Nein, in der Doku nachlesen, denn dazu ist sie da. Die Faustregel "wenn String, dann Quotes" ist daraus wirklich nicht schwer zu extrapolieren - und im Zweifel schaue *immer* in der Doku nach, anstatt rumzuprobieren.

                    Hi Cheatah,

                    erst schnell Danke, dann:

                    Ich hab keinen Schimmer, wo die Doku ist. Und wenn die dann in englisch ist, komm ich eh nicht weiter, weil mein englisch oft nicht gut genug ist.

                    Grüße

                    Rod

                    1. Hallo,

                      Ich hab keinen Schimmer, wo die Doku ist. Und wenn die dann in englisch ist, komm ich eh nicht weiter, weil mein englisch oft nicht gut genug ist.

                      Die Doku zu MySQL und PHP gibt's auch in Deutsch.
                      Allerdings ist die englische Version oft aktueller, ausfuehrlicher und besser.

                      http://www.mysql.com/doc/de/Reference.html
                      http://www.php.net/manual/de/

                      Beide Dokus gibt's auch als Download-Version.

                      Gruesse,

                      Thomas

                      1. Die Doku zu MySQL und PHP gibt's auch in Deutsch.
                        Allerdings ist die englische Version oft aktueller, ausfuehrlicher und besser.

                        Hi Thomas,

                        danke für die Links, werde mir die gleichmal ansehen.

                        Hier übrigens meine Query:

                        select ID2,Kundennummer,Firma,PLZ,Ort from Tabelle order by 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 1

                        Grüße

                        Rod

                        1. Hallo,

                          Hier übrigens meine Query:
                          select ID2,Kundennummer,Firma,PLZ,Ort from Tabelle order by

                          Ich vermute, hier hoert die Query auf.
                          Du sagst nur "sortiere nach", aber nicht, nach was.
                          Entweder
                          ORDER BY feldXY
                          oder nichts.

                          Wie ich Dir schon laengst ([pref:t=63122&m=357645]) vorgeschlagen hatte:
                          Mach einen Zeilenumbruch nach der Anzeige der Query:
                          echo "$query<br>";

                          Gruesse,

                          Thomas

                          1. Hallo,

                            Hier übrigens meine Query:
                            select ID2,Kundennummer,Firma,PLZ,Ort from Tabelle order by

                            Ich vermute, hier hoert die Query auf.
                            Du sagst nur "sortiere nach", aber nicht, nach was.
                            Entweder
                            ORDER BY feldXY
                            oder nichts.

                            Hi Thomas,

                            ach klar *vordieStirnhau* jetzt wird mir deutlich, was ich falsch gemacht habe.

                            In meine Variable $sortiert_nach  muß der komplette Ausdruck, inkl. order by hinein, dann ists wieder stimmig.

                            Wie ich Dir schon laengst ([pref:t=63122&m=357645]) vorgeschlagen hatte:
                            Mach einen Zeilenumbruch nach der Anzeige der Query:
                            echo "$query<br>";

                            Ääh, wozu? Ach, damit wäre klarer geworden, daß meine Query unvollständig ist und mir 2 Bildschirmausgaben geschickt wurden und nicht eine zusammenhängende.

                            Danke und Grüße

                            Rod

                            1. Hi nochmal,

                              warum wird erste Query korrekt bearbeitet und die zweite rezeugt die Syntaxfehlermeldung?

                              select ID2,Kundennummer,Firma,PLZ,Ort from Tabelle where KundenID=4 order by Auftragsdatum

                              select ID2,Kundennummer,Firma,PLZ,Ort from Tabelle order by Firma

                              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 1

                              Grüße

                              Rod

                              1. Hi nochmal,

                                warum wird erste Query korrekt bearbeitet und die zweite rezeugt die Syntaxfehlermeldung?

                                select ID2,Kundennummer,Firma,PLZ,Ort,Auftragsdatum from Tabelle where KundenID=4 order by Auftragsdatum

                                select ID2,Kundennummer,Firma,PLZ,Ort,Auftragsdatum from Tabelle order by Firma

                                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 1

                                Grüße

                                Rod

                                1. keiner mehr da :-)

                                2. Hallo,

                                  warum wird erste Query korrekt bearbeitet und die zweite rezeugt die Syntaxfehlermeldung?

                                  select ID2,Kundennummer,Firma,PLZ,Ort,Auftragsdatum from Tabelle where KundenID=4 order by Auftragsdatum

                                  select ID2,Kundennummer,Firma,PLZ,Ort,Auftragsdatum from Tabelle order by Firma

                                  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 1

                                  Wenn ich nichts größeres Übersehen habe, sehen beide Queries für mich syntaktisch korrekt aus. Schreibe die Queries doch mal hart codiert in die Variable $query und garniere sie mit ein paar Zeilenumbrüchen, damit mysql die Zeile mit dem Fehler besser definieren kann:

                                  $query = "select\n ID2,Kundennummer,Firma,PLZ,Ort,Auftragsdatum\n from Tabelle\n order by Firma";
                                  $result = mysql_query($query);
                                  if (!$result) {
                                     echo $query."<br>";
                                     echo mysql_error();
                                  }

                                  Welche Fehlermeldung erhältst Du dann?

                                  Gruß Alex

                                  --
                                  http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart
                                  ss:) zu:} ls:} fo:| de:[ va:| ch:| sh:( n4:& rl:° br:& js:| ie:| fl:| mo:}
                                  1. Welche Fehlermeldung erhältst Du dann?

                                    Gruß Alex

                                    Hi Alex,

                                    1. die selbe! (Erklärung folgt)
                                    2. Was heißt hartcodiert?

                                    zu 1) Ich hab den fehler gefunden. Es war halt immer diese Fehlermeldung da und ich hab vergessen zu erwähnen, daß das Script trotzdem die Tabelle mit den Ergebnissen ausspuckt.

                                    Der Fehler war also gar nicht in dieser Abfrage versteckt, sondern in einem included-script (kann man das so nennen?), daß ebenfalls eine Abfrage enthielt, aber auf eine Variable angewiesen war, dioe es nicht hatte.

                                    Eine if-Anweisung später war alles wieder ok, aber ohne Deinen Ratschlag wäre ich da nie hinter gestiegen, weil erst Dein ratschlag mir klargemacht hat, daß die Abfrage, die ich Euch hier als Ursache gemeldet hatte ja tadellos ausgeführt wird.

                                    Vielen Dank für die Hilfe

                                    Rod

                                    1. Hallo,

                                      Eine if-Anweisung später war alles wieder ok, aber ohne Deinen Ratschlag wäre ich da nie hinter gestiegen, weil erst Dein ratschlag mir klargemacht hat, daß die Abfrage, die ich Euch hier als Ursache gemeldet hatte ja tadellos ausgeführt wird.

                                      Längerfristig solltest DU DIr auf jeden fall überlegen, wie DU zu genug Wissen über die von DIr verwendeten Werkzeuge (Datenbank, Programmiersprache usw.) aneignest, um selbst die Richtigket von Anweisungen feststellen zu können bzw. dir selbst bei der Fehlersuche zu trauen. Denn ich denke doch, dass es für Dich ziemlich mühsam sein muß, immer jemanden anderen fragen zu müssen, ob das denn nun auch noch korrekt ist.

                                      Grüße
                                        Klaus

                                      1. Denn ich denke doch, dass es für Dich ziemlich mühsam sein muß, immer jemanden anderen fragen zu müssen, ob das denn nun auch noch korrekt ist.

                                        Grüße
                                          Klaus

                                        Hi Klaus,

                                        lieb, daß Du Dir darum Sorgen machst. Ist aber nicht nötig, ich lerne bei jeder Frage/Antwort dazu.
                                        Und vor allem ist es ja nicht so, daß ich hier immer fertige Lösungen bekomme. Oft sind es nur Hinweise zur Fehlersuche und die kann ich dann beim nächsten Mal schon selber anwenden.

                                        Gut, ne?

                                        Oder aus diesem Thread nehme ich soviel über die vorhandenen Möglichkeiten der Fehlersuche mit, was ich natürlich in die Scripte eingebaut habe und so beim nächsten Mal schon automatisch wieder verwende.

                                        Aber Du hast Recht, ich tue mich unendlich schwer, komplette Dokumentationen auf von mir benötigte Teilaspekte zur Fehlersuche zu untersuchen. Möglicherweise fehlt mir dazu einfach eine gute Portion Basiswissen. Deshalb studiere ich schon Bücher zum Thema, aber der Teufel (sieh obiges Problem) steckt oft so versteckt im Detail, daß ich ihn nicht finde und dann hier frage.
                                        Klar, ich könnte jetzt auch für jedes Problem nen anderen Namen ausdenken, fände ich aber albern.

                                        Grüße

                                        Rod

                                        1. Hallo,

                                          [...]

                                          Oder aus diesem Thread nehme ich soviel über die vorhandenen Möglichkeiten der Fehlersuche mit, was ich natürlich in die Scripte eingebaut habe und so beim nächsten Mal schon automatisch wieder verwende.

                                          Wichtig ist auch, bei einem Fehler nicht unbedingt im Originalskript herumzuwurschteln, sondern die Fehlerquelle zu isolieren. Sprich, nachdem man glaubt sie gefunden zu haben, diese in ein extra dafür geschriebenes Skript einbauen, welches nur diesen Fehler erzeugt. In Deinem Fall wäre das als einfach die Verbindung zur Datenbank herstellen, die Query ausführen und die Fehlermeldung ausgeben. Dann wäre Dir auch sofort - also mindestens zwei Postings vorher - aufgefallen, daß der extrahierte Codeblock gar nicht der Verursacher des Fehlers ist.

                                          Bei der bedingten Ausgabe von selbst generierten Fehlermeldungen ist es oft auch hilfreich, den Skriptnamen (damit man es im Server-Errorlog besser zuordnen kann) und die Zeilennummer der Fehlerausgabe anzuzeigen (evtl. auch mehr). Siehe hierzu http://www.php.net/manual/de/language.constants.predefined.php

                                          [...]

                                          Gruß Alex

                                          --
                                          http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart
                                          ss:) zu:} ls:} fo:| de:[ va:| ch:| sh:( n4:& rl:° br:& js:| ie:| fl:| mo:}
                2. Hi,

                  danke, hätte ich drauf kommen dürfen, finde ich :-) Ok, hier also meine Query mit etwas drum herum, damit der Zusammenhang gewahrt bleibt:

                  Das ist nicht die Query, sondern nur der Code, der die Query erzeugt.
                  Gib die tatsächliche Query aus (also nach Einsetzen aller Variablen.

                  $result=mysql_query("select ID,Kundennummer,Firma,PLZ,Ort from Tabelle $where order by '$sortiert_nach'");

                  Ersetze das durch:
                  $query = "select ID,Kundennummer,Firma,PLZ,Ort from Tabelle $where order by '$sortiert_nach'";

                  echo $query;

                  $result=mysql_query($query);

                  Dann siehst Du, wie die Query aussieht, die tatsächlich an mysql geschickt wird.

                  $where="where ID=$ID";

                  Du vergleichst hier die Spalte ID mit der Spalte, deren Name in $ID drinsteht.

                  cu,
                  Andreas

                  --
                  Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
                  http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
                  1. Hi Andreas,

                    auch ganz schnell danke. Werde das mal machen und weitersehen und mich wieder melden.

                    Grüße

                    Rod

      2. Hallo,

        Ich hab mir alles angesehen, in einem anderen Script verwende ich genau die gleiche Abfragesyntax und alles läuft prima...

        Lass Dir die Query anzeigen.
        Und wenn Du den Fehler dann immer noch nicht findest,
        poste sie hier.

        Gruesse,

        Thomas

        P.S. Oft liegt der Fehler bei vergessenen Anfuehrungszeichen...