Wie kann ich das beheben MySQL Fehler #1064?
Wenn Sie einen Befehl ausführen, MySQL, bin ich immer Fehler #1064 "syntax-Fehler".
- Was bedeutet es?
- Wie kann ich es beheben?
InformationsquelleAutor eggyal | 2014-05-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aaaagh!! Was bedeutet #1064 bedeuten?
Fehlermeldungen können Aussehen wie Kauderwelsch, aber Sie sind (oft) unglaublich informativ und ausreichend detailliert, um herauszufinden, was falsch gelaufen ist. Um zu verstehen, was MySQL sagt Ihnen, Sie können, Bewaffnen Sie sich zum beheben von Problemen dieser Art in der Zukunft.
Als in vielen Programmen, MySQL Fehler werden codiert nach dem Typ problem, dass aufgetreten ist. Fehler #1064 einen syntax-Fehler.
Was ist dieser "syntax" von dem du sprichst? Ist es Hexerei?
Während die "syntax" ist ein Wort, dass viele Programmierer nur Begegnung im Kontext von Computern, ist es in der Tat entlehnt breiter Linguistik. Es bezieht sich auf die Satz-Struktur: d.h. die Regeln der Grammatik; oder, in anderen Worten, die Regeln, die definieren, was eine gültigen Satz innerhalb der Sprache.
Beispielsweise die folgenden englischen Satz enthält einen Syntaxfehler (da der unbestimmte Artikel "ein" muss immer vor einem Nomen):
Was hat das zu tun mit MySQL?
Wann immer man Fragen zu einem Befehl zu einem computer, einer der ersten Dinge, die Sie tun müssen, ist der "parse" - Befehl, um Sinn zu machen. "Syntax-Fehler" bedeutet, dass der parser nicht in der Lage ist, zu verstehen, was verlangt wird, weil es sich nicht um einen gültigen Befehl in der Sprache: in anderen Worten, der Befehl verstößt gegen die Grammatik der Programmiersprache.
Es ist wichtig zu beachten, dass der computer muss verstehen, den Befehl, bevor Sie irgendetwas machen können. Da ist ein syntax error, MySQL hat keine Ahnung, was man nach und daher gibt , bevor es sieht sogar an der Datenbank und daher das schema oder die Tabelle Inhalte nicht relevant sind.
Wie kann ich es beheben?
Offensichtlich, man muss bestimmen, wie es ist, dass der Befehl, gegen die MySQL-Grammatik. Das klingt ziemlich undurchdringlich, aber MySQL ist zu versuchen wirklich hart, um uns hier helfen. Alles, was wir tun müssen, ist...
Lesen Sie die Nachricht!
MySQL nicht nur sagt uns genau, wo der parser hat die syntax-Fehler, sondern macht auch einen Vorschlag für die Festsetzung es. Betrachten Sie beispielsweise die folgende SQL-Befehl:
Dieser Befehl ergibt folgende Fehlermeldung:
MySQL sagt uns, dass alles schien in Ordnung bis zu dem Wort
WHERE
dann aber ein problem aufgetreten ist. In anderen Worten, es war nicht erwartet hätte, aufWHERE
an diesem Punkt.Nachrichten, die sagen
...near '' at line...
einfach bedeuten, dass der Ende-Befehl gestoßen war unerwartet: das ist etwas anderes erscheinen soll, bevor der Befehl beendet.Untersuchen der eigentliche text des Befehls!
Programmierer oft erstellen Sie SQL-Befehle in einer Programmiersprache. Zum Beispiel ein php-Programm könnte haben einen (falschen) Zeile wie diese:
Wenn Sie schreiben, das dieser in zwei Zeilen
dann können Sie
echo $query;
odervar_dump($query)
zu sehen, dass die Abfrage sagt eigentlichOft sehen Sie Ihren Fehler sofort und werden in der Lage, es zu beheben.
Gehorchen!
MySQL ist auch zu empfehlen, dass wir "überprüfen Sie die Bedienungsanleitung, entspricht unserer MySQL-version für den richtigen syntax zur Verwendung". Lassen Sie uns das tun.
Ich bin mit MySQL v5.6, so werde ich wiederum auf diese version ist die manuelle Eingabe für ein
UPDATE
- Befehl. Die sehr erste, was auf der Seite ist der Befehl in der Grammatik (das gilt für jeden Befehl):Das Handbuch erläutert, wie diese zu interpretieren syntax unter Schreib-und Syntax-Konventionen, aber für unsere Zwecke ist es ausreichend zu erkennen, dass: Bestimmungen in eckigen Klammern
[
und]
sind optional; vertikale Balken|
alternativen angegeben werden; und Ellipsen...
Kennzeichnen eine Auslassung für die Kürze, oder der vorstehenden Klausel wiederholt werden können.Wissen wir bereits, dass der parser glaubten alles, was in unserer Mannschaft war okay, vor der
WHERE
keyword, oder in anderen Worten, bis zu und einschließlich der Tabelle verweisen. Blick auf die Grammatik, wir sehen, dasstable_reference
werden muss, gefolgt von derSET
Stichwort: während in unserer Mannschaft war es eigentlich, gefolgt von derWHERE
Schlüsselwort. Dies erklärt, warum der parser meldet, dass ein problem aufgetreten ist.Ein Hinweis der Reservierung
Natürlich, dies war ein einfaches Beispiel. Aber, indem Sie die beiden oben beschriebenen Schritte (also die Beobachtung genau, wo in dem Befehl der parser gefunden, die Grammatik verletzt werden und der Vergleich gegen das Handbuch die Beschreibung von , was zu erwarten war an diesem Punkt), praktisch jeden syntax-Fehler leicht identifiziert werden können.
Ich sage "nahezu", denn es gibt eine kleine Klasse von Problemen, die nicht ganz so leicht zu erkennen—und das ist, wo der parser die Auffassung, dass die Sprache ein element begegnet, bedeutet, eine Sache, während Sie beabsichtigen, es zu meinen anderen. Nehmen Sie das folgende Beispiel:
Wieder, der parser nicht erwarten, auf
WHERE
an diesem Punkt, und so wird zu erhöhen eine ähnliche syntax Fehler—aber Sie hatte nicht gedacht, dass fürwhere
werden, um ein SQL-Schlüsselwort: Sie waren bestimmt für ihn, um eine Spalte für die Aktualisierung! Allerdings, wie beschrieben, unter Schema Object Names:ist in der Tat ein reserviertes Wort ist—es wird in der Liste, die in meiner Antwort links, in dev.mysql.com/doc/en/reserved-words.html . Es ist kein bug, das Verhalten ist by design und gut dokumentiert. Was sind Sie, "so dass offen"? Dieser Beitrag ist bereits eine vollständige und umfassende Antwort.
InformationsquelleAutor
Für meinen Fall, ich habe versucht, die execute-Prozedur-code in MySQL ist, und aufgrund von einigen Problem mit der server in der Server kann nicht herausfinden, wo bis zum Ende der Aussage wurde ich immer Fehler Code 1064. Also wickelte ich die Prozedur mit benutzerdefinierten TRENNZEICHEN und es funktioniert gut.
Zum Beispiel, Vorher war es:
Nachdem er TRENNZEICHEN war es so:
Das nennen wir ein Problem. Ich glaube du verwechselst die Bedeutung von "Problem" mit den "bug", das ist nicht gemeint hier.
Das Problem hier ist, dass das benutzerdefinierte Trennzeichen ist nicht erforderlich, in allen Umgebungen und das führt zum problem, wenn ein script funktioniert Prima in der Entwicklungsumgebung funktioniert nicht wie erwartet in der Test-oder Produktionsumgebung und erzeugt Fehler.
InformationsquelleAutor Umair Malhi