dポイントプレゼントキャンペーン実施中!

こんにちは。mySQL初心者です。

例えば、「sample」というDBに以下の3つのフィールドのあるテーブル「text」があるとします。
(実際には、DATETIME型のフィールドも含めて20列あります)

key => 整数型で、プライマリキー&オートインクリメントを設定
status => テキスト型(UTF-8)
note => テキスト型(UTF-8)

ここで、「SELECT * FROM text WHERE key=1」というSQLで1つ目のレコードを取得しようとすると、「#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 'key=1 LIMIT 0, 30' at line 1」というエラーが出てしまいます。

「SELECT * FROM text WHERE status='sample_01'」や「SELECT * FROM text WHERE note='test entry'」というSQL文ならちゃんとデータを取得できるのですが、「WHERE key=1」のようにプライマリキーで検索しようとするとエラーになるのは何故でしょうか。

どなたか見当が付くかたがいらっしゃいましたら、教えていただけないでしょうか。
よろしくお願いします。

<環境>
XAMPP Ver.1.7.4で、mySQLは Ver. 5.5.8です。

A 回答 (2件)

keyは予約語なので本来であればフィールド名などに使わない方がいいです。



SELECT * FROM `text` WHERE `key`=1

というようにバッククウォートで囲んでみてください。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

非常に初心者らしい(自分で言うのもなんですが)間違いをしてしまいました。
おっしゃるとおり、フィールド名に予約語を使っていたことが原因でした。

バックウォート(初めて使いました)で括ったら正常に機能しましたが、今後のためにもテーブルを作り直そうかと思います。

お礼日時:2011/10/22 08:45

「key」は予約語です。

バッククォートして実行してみてはいかがですか。「text」も気になります。
SELECT * FROM `text` WHERE `key`=1
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

ご指摘のとおり、フィールド名に予約語を使っていたことが原因でした。
テーブル名の「text」も、いずれトラブルに発展しそうな気配が濃厚ですよね。

まだテスト段階のDBなので、テーブル名も改めて、最初から作り直そうと思います。

お礼日時:2011/10/22 08:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!