予約語に注意、Something is wrong in your syntax

何の変哲もない参照のクエリを発行したのです。

SELECT * FROM test_table WHERE id = 1 AND name = 'test' AND year_month = '201003'

エラーが返ってきた

#1064 - Something is wrong in your syntax :
 'year_month = '201003' AND agent_id = 13' 付近 : 1 行目

文法エラーらしい。こんな単純なSELECT文で文法エラーなんて恥ずかしい。しかし、どうもエラーらしい要素が分からなかった。文字列を''で囲んでいないとかでもないし。


SELECT文は、はてな記法mysqlモードで表示しているので、色分け的に気づいたかもしれないのですが、year_monthが予約語だったから、文法エラーのようです。year_monthという予約語は、日付関数のDATE_ADD関数とDATE_SUB関数で、日にちの計算の式の解釈に使うらしいです。日付系の単語は気をつけないといけなさそうな感じです。
year_monthが予約語ならCREATE文の時点で、予約語として文法エラーでてたでしょうと言われそうですが、テーブルの作成はphpmyadminのテーブルの作成機能を使ってしまったのです。phpmyadminのテーブル作成機能を使うと、丁寧にカラム名は全部``(バッククォート)で囲んでくれるからエラーでないんです。だから、気づかなかったというわけで。


解決方法はといわれると、phpmyadminのようにカラム名を``で囲む。というか、カラム名予約語を使うなってことですね。少なくとも気付いた時点でカラム名を変更してしまう方がいいです。