2011-03-30 42 views
0

我有一個非常簡單的MySQL查詢,通常效果很好對我的其他網站,但是這一次我收到以下錯誤:MySQL的語法錯誤

Fatal error: 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 'where id = 1' at line 1 INSERT INTO members (plan, active) VALUES ('3 Days Plan','Y') where id = 1

代碼:

$db->query("INSERT INTO members (plan, active) VALUES ('$plan','$active') where id = $custom"); 

我我正在使用mysql rainphp類。

我肯定有一個簡單的解決方案,但我是新手,只是不能想出辦法來的:)

編輯:

大家好,

謝謝您的回答!我覺得現在不知道WHERE子句只用於UPDATE,所以現在感覺像個白癡。但它是有意義的!

再次感謝您的幫助!

+3

「insert」語句中不能有'where'子句 - 你想要做什麼? – Blorgbeard 2011-03-30 10:59:11

回答

4

不能插入和使用WHERE在同一時間。這隻適用於更新。

3

如果你想INSERT,使用方法:

$db->query("INSERT INTO members (plan, active) 
    VALUES ('".mysql_real_escape_string($plan)."', 
    '".mysql_real_escape_string($active)."')"); 

WHERE條款是沒用在這裏。

編輯:你想做一個INSERTUPDATE

如果UPDATE

$db->query("UPDATE members SET 
    plan = '".mysql_real_escape_string($plan)."', 
    active = '".mysql_real_escape_string($active)."' 
    WHERE id=".intval($id)); 
0

您不需要在插入語句中提供where子句。

1

您不應在插入查詢中使用where子句。


刪除where條款,讓您的代碼如下所示:

$db->query("INSERT INTO members (plan, active) VALUES ('$plan','$active')"); 


不知道爲什麼你把這個where條款存在;但如果您想要修改某些數據,則需要使用update查詢 - 而不是insert

例如:

update members 
set plan = '$plan', 
    active = '$active' 
where id = $custom 


一點題外話:你需要確保你逃避你的數據 - 如果使用您使用了您類(PDO::quote提供的功能/方法,例如, PDO)

+0

嗨Pascal,我正在使用一個小函數(函數安全($ value){htmlentities($ value,ENT_QUOTES,'utf-8'); return $ value;})以確保在傳遞給mysql之前檢查所有條目。這應該這樣做吧? – Andrej 2011-03-30 11:12:15

+1

否:htmlentities爲HTML輸出轉義數據;不適用於SQL輸出;;我應該補充說htmlentities返回修改過的字符串,並且在這裏,你沒有使用它的返回值 - 所以,基本上,你的函數什麼都不做。 – 2011-03-30 11:12:49

+0

哦,好吧。謝謝(你的)信息。我會改變它,並確保使用mysql_real_escape_string轉義所有數據。我希望這會做到。 – Andrej 2011-03-30 11:15:57