2011-08-11 56 views
1

我正在嘗試對我的MySQL數據庫使用UPDATE。我用下面的SQL代碼:與WHERE一起使用主鍵時的SQL語法錯誤

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

當我使用此代碼我收到以下錯誤信息:「您的SQL語法錯誤;檢查對應於您的MySQL服務器版本正確的語法手冊用接近人指數= 1'第3" 行

但是當我使用

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

一切正常。我的數據庫有一個名爲「待辦事項」的表格,其中包含3個列:Index(int,主鍵,auto_increment),Checked(bool)和Text(文本)。

難道你不能「在哪裏」的主鍵還是我忘記了別的東西?

希望你能幫助我。

回答

5

index是MySQL的一個reserved word。您需要通過添加如下反引號來避免名稱:

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

布爾值爲0或1,而不是-1。嘗試使用0或1作爲檢查,並讓我們知道發生了什麼。

+1

這甚至不是真的。 'BOOLEAN'和'BOOL'是'TINYINT(1)'的同義詞,它的取值範圍是-128到+127。見http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html – Mike

+0

哇。已經過了漫長的一天,至少可以說...也許我應該放棄,而我在前面。 – Jaime

+1

請在發佈這樣的答案之前檢查一下自己。 – grep

0

爲了確保MySQL知道您正在討論的是列名而不是保留字,您可以始終使用列名tablename.columnname。 在同樣使用快捷鍵SELECT查詢是可能的:

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

此外,我建議不要在表和列使用駱駝情況。這被證明是錯誤的根源,並且在大多數情況下並沒有真正的好處。