web-dev-qa-db-ja.com

MySQLエラー#1064を修正するにはどうすればいいですか?

MySQLにコマンドを発行すると、エラー#1064「syntax error」が発生します。

  1. どういう意味ですか?

  2. どうすれば修正できますか?

60
eggyal

SQuirreL ClientでCREATE PROCEDUREのようなセミコロンを使用してSQL式を実行するとエラーが発生する場合は、MySQLプラグインが必要です。インストール時に選択できます。デフォルトでは選択されていません。

0
Horcrux7

私の場合は、MySQLでプロシージャコードを実行しようとしていましたが、エラーコード1064が表示されていたため、Serverでステートメントの終了位置を特定できないという問題がありました。それはうまくいった。

たとえば、

DROP PROCEDURE IF EXISTS getStats;
CREATE PROCEDURE `getStats` (param_id INT, param_offset INT, param_startDate datetime, param_endDate datetime)
BEGIN
    /*Procedure Code Here*/
END;

DELIMITERを置いた後、それはこんな感じでした:

DROP PROCEDURE IF EXISTS getStats;
DELIMITER $$
CREATE PROCEDURE `getStats` (param_id INT, param_offset INT, param_startDate datetime, param_endDate datetime)
BEGIN
    /*Procedure Code Here*/
END;
$$
DELIMITER ;
0
Umair Malhi

必要な引用符なしで、JSONまたは他のデータを特殊文字で挿入しようとしたときにも、このエラーが発生します。

UPDATE myTable SET myJSONfield = {};

に変更

UPDATE myTable SET myJSONfield = '{}';
0
Andrew

それはあなたの文字列や挿入されたデータにシングルクォート 'が含まれているからです

mysql_real_escape_string() for mysql or mysqli_real_escape_string() for mysqli

データベースへのデータ挿入(クエリ挿入)中に文字列をエスケープする機能。

0
Hussnain sheikh

様々な理由があります。変数を宣言すると、他の種類のステートメントよりも前になります。それ以外の場合は、その前にBEGINブロックを配置する必要があります。

DECLARE _RoomID INTEGER ;

    SET _dtTodayTmp=NOW();
    SET _dtToday=DATE_FORMAT(_dtTodayTmp,"%m/%d/%y");
    SET _tmNow=DATE_FORMAT(_dtTodayTmp,"%h:%i:%s");

    DECLARE tree_cursor1 CURSOR 
    FOR SELECT roomid FROM reservationDet rd WHERE rd.status=3 AND rd.compcode=pCompCode; 

エラーを出しますので、それを作る必要があります

DECLARE _RoomID INTEGER ;
    SET _dtTodayTmp=NOW();
    SET _dtToday=DATE_FORMAT(_dtTodayTmp,"%m/%d/%y");
    SET _tmNow=DATE_FORMAT(_dtTodayTmp,"%h:%i:%s"); 

    **BEGIN**
        DECLARE tree_cursor1 CURSOR
        FOR SELECT roomid FROM reservationDet WHERE STATUS = 3 AND compcode = pCompCode ; 
0
user5493732