phpMyAdmin
 sql >> Datenbank >  >> Database Tools >> phpMyAdmin

Unable to Run Query in MySQL Syntaxfehler unerwartet

Problem damit:

DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...

ist, dass MySQL das Semikolon am Ende des DROP PROCEDURE nicht sieht Anweisungszeile als Ende der Anweisung. Dies liegt daran, dass die vorangehende Zeile MySQL mitgeteilt hat, dass das Abschlusszeichen der Anweisung etwas anderes als ein Semikolon ist. Sie haben MySQL mitgeteilt, dass Anweisungen mit zwei Dollarzeichen abgeschlossen werden. MySQL liest also die DROP PROCEDURE Zeile und suchen Sie nach dem Abschlusszeichen der Anweisung. Und der ganze Blob, den es liest, ist KEINE gültige MySQL-Anweisung, es erzeugt einen Syntaxfehler.

Die Lösung:Entweder das DROP PROCEDURE verschieben Zeile vor das DELIMITER $$ Linie; oder beenden Sie das DROP PROCEDURE Anweisung mit dem angegebenen Trennzeichen statt einem Semikolon.

Das zweite Problem, das Sie melden, ist ein Syntaxfehler. Das passiert, weil MySQL IF nicht erkennt als Beginn einer gültigen SQL-Anweisung.

Das IF Anweisung ist nur gültig im Kontext eines gespeicherten MySQL-Programms (zum Beispiel innerhalb eines CREATE PROCEDURE Erklärung.)

Die Lösung:Verwenden Sie ein IF -Anweisung nur im Kontext eines gespeicherten MySQL-Programms.

Das dritte Problem, das Sie melden, ist ebenfalls ein Syntaxfehler. Das passiert, weil Sie keine gültige Syntax für ein SET haben Erklärung; MySQL-Syntax für SET Anweisung zum Zuweisen eines Werts zu einer Benutzervariablen lautet:

SET @uservar = expr 

MySQL erwartet einen Ausdruck nach dem Gleichheitszeichen. MySQL ist nicht erwartet eine SQL-Anweisung.

Einer Benutzervariablen einen Wert als Ergebnis eines SELECT zuweisen -Anweisung, nehmen Sie die Zuweisung innerhalb der SELECT-Anweisung vor, zum Beispiel:

SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'

Beachten Sie, dass der Zuweisungsoperator innerhalb von SELECT Anweisung ist := (Doppelpunkt ist gleich), nicht nur = .