2011-08-11 10 views
1

で主キーを使用して。私は、次のSQLコードを使用:SQL構文エラー私は私のMySQL-データベースでUPDATEを使用しようとしていますWHERE

$sql = "UPDATE ToDo 
    SET Checked = -1 
    WHERE Index = 1"; 

私はこのコードを使用すると、私は次のエラーメッセージが出ます:「あなたはあなたのSQL構文でエラーが発生しているが、右の構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください3" 行目

に近い 'インデックス= 1' を使用しかし、私は使用している場合

$sql = "UPDATE ToDo 
    SET Checked = -1 
    WHERE Text = 'asdf'"; 

すべてが機能しています。インデックス(int型、主キー、AUTO_INCREMENT)、チェック(ブール値)とテキスト(テキスト):

私のデータベースには、3 collumnsと "ToDoリスト" という名前のテーブルを持っています。

「どこで」プライマリキーを使用できないのですか、他に何か忘れましたか?

あなたが私を助けてくれることを願っています。バッククォートを追加

答えて

5

indexは、MySQLのreserved wordです:

UPDATE ToDo 
    SET `Checked` = -1 
    WHERE `Index` = 1"; 

指数は予約語です。

$sql = "UPDATE ToDo 
SET Checked = -1 
WHERE `Index` = 'asdf'"; 
-2

ブール値は-1ではなく、0または1です。 Checkedに0または1を使用してみて、何が起こったかをお知らせください。

+1

これは真実ではありません。 'BOOLEAN'と' BOOL'は-128 +127までの値の範囲を持ち 'TINYINT(1) '、同義語です。 http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html – Mike

+0

Wowを参照してください。もう少し言っておくのはすでに長い一日です...私が先にいる間に私はやめなければならないかもしれません。あなたはこれらのような答えを投稿する前に – Jaime

+1

自分で確認してください。 – grep

0

MySQLが、予約語ではなく列名について話していることを理解するためには、常にカラム名tablename.columnnameに対処することができます。また、ショートカットを使用してSELECTクエリで が可能です:

UPDATE ToDo SET ToDo.Checked = -1 WHERE ToDo.Index = 1
SELECT u.Index FROM users u

はまた、私は、テーブルと列にラクダケースを使用しないことをお勧めします。これはエラーの原因であることが判明し、ほとんどの場合実際のメリットはありません。

関連する問題