2009-05-26 25 views
2

エラーこのSQL INSERT文が構文エラーを返すのはなぜですか?

INSERT INTO customreports (study, type, mode, select, description) VALUES ('1', '2', '3', '4', '5');

を、私は非常に単純なMySQLデータベースを持っていますが、私はmysqlの管理者を経由して、このクエリを実行しようとすると、私は奇妙なエラーが発生しますOK:あなたはあなたのために問題を抱えている

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select, description) VALUES ('1', '2', '3', '4', '5')' at line 1

答えて

13

SQL予約語を列名として使用し、エスケープしません。

INSERT INTO `customreports` 
(`study`, `type`, `mode`, `select`, `description`) 
VALUES 
('1', '2', '3', '4', '5'); 
+6

+1これは正解ですが、私は間違いなくフィールド名を非予約語に変更します。オブジェクト名に予約語を使用すると、あなたとあなたの後に来るすべての人の頭痛につながります。 –

+1

これは正に正しい答えです。ただし、予約語を使用しないためにカラム名を変更することはお勧めしません。すべての識別子をエスケープするとよいでしょう。私が認めなければならないのは、列名としての「選択」は少し上です。 – shylent

0

単語「select」(列名として列挙されています)が問題を起こしていますか?

+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 –

+0

@il_guru、選択された答えを見て、その後、私の類似点に気づくでしょうか? –

0

は、「SELECT」

0

SQLに予約されている単語「を選択」を「選択」とは別の単語を使用して... SQLの予約語です。インタプリタは、INSERT INTOステートメント内でSELECTステートメントを使用しようとしていると考えています。インタプリタがコマンドとしてそれらを読み込まないように、フィールド名を囲む必要があります。 MySQLの

更新:

insert into customreports ('study','type','mode','select','description') values... 
3

ええ、私はのように書き換えます:[customreports]([研究]、[タイプ]、[モード]、[変更]、[説明INTO

INSERTを]))VALUES( '1'、 '2'、 '3'、 '4'、 '5');

0
カオスあたり正しい

...しかし、覚えておくべき重要なことは、あなたがそのようなSELECTやTYPE ....他の正のないよう、テーブルの列名として予約語を...使用しないように最善を行う必要がありますです3つですが、それがあなたの葛藤の場所です。はい、フィールドの周りの引用符を明示的に指定することで、SQLの中にフィールドがあることがわかりますが、回避策が解決されていないだけでなく、今後も同様の問題を防ぐのに役立ちます。上記同上

0

、私はあなたが列名ではなく、単一引用符を二重引用符が必要と考えています。多分、SQLのいくつかのフレーバーは一重引用符を正しく処理しますが、標準ではフィールド名の二重引用符、フィールド値の一重引用符があると思います。

+2

いいえ、これはmysqlで、mysqlは識別子のエスケープ文字としてバッククイックを受け入れます。 – shylent

関連する問題