MySQLへのINSERT時などに構文エラー1064が発生した場合は、使用できない文字が混入しているという原因がほとんどです。
構文エラーなので、あなたの書いた構文は文法が違いますよ。っていう事です。
カンマが多くても少なくても出ますし、クォートがなくても出ますし、文字コードの問題でも出るエラーです。
構文エラー1064が出た
今回はMySQLで以下のような構文を実行したら1064エラーが発生しました。
誤った例
insert into table1 (col1,col2,) values (data1,data2,);
正しくは
insert into table1 (col1,col2) values (data1,data2);
これは完全に構文のミスなので、すぐに気付けますが、挿入データに記号が含まれる場合にも1064エラーが吐かれます。
記号をエスケープしてないとエラー
データの中身に記号が含まれる事もありますけど、初歩的なエスケープを忘れてしまうと同じように1064エラーが表示されます。
怪しいデータだけでなくデータベースに送信する文字列には、
mysql_real_escape_string($hoge);
を掛けることでほとんどの場合解決しますよ。
それでも1064エラーが出る!
上記の方法でもまだエラーが出る場合には、ファイルの文字コードとデータベースの文字コードを確認しましょう。
エンコードが間違っていると予期しない文字列に化けてしまう余裕でシンタックスエラーが出ます。
まだダメだという場合には、予約語を疑ってみましょう。
MySQLの予約語はあらかじめ定められた変数のような物なので、ユーザーが使うとエラーがでます。
陥りやすい予約語は、
- unique
- check
- group
- option
- update
などが上げられます。まだまだありますが、使ってしまっていないか落ち着いて構文を見直してみましょう。
それでもまだ構文にエラーが出るというのなら、最後はシングルクォートとバッククォートの指定を疑った方がいいです。
文字列はきちんとシングルクォートで囲まれていますか?
まとめ
MySQLの構文エラーでハマってしまう時もあると思いますが、基本的な部分を抑えてしまえば難しい事はありません。
今回は私が何度も何度も経験したエラーコード:1064について思いつく限りの解決方法を提案してみました!
今日も知識欲は止まらない。