2013-04-08 52 views
2

我試圖使用IF在MySQL的存在,但我不斷收到語法錯誤,我已經研究了正確的語法,但一切都心不是工作...mysql如果存在錯誤語法錯誤?

我需要的是: 如果查詢存在然後更新否則插入新的。 ..

$queryString = "IF EXISTS (SELECT * FROM $ONCALL_TABLE WHERE uid='$contextUser' AND submitid='$submitid' AND submitstatus=3) THEN UPDATE $ONCALL_TABLE SET uid='$contextUser', start_time='$onStr', end_time='$offStr', amount='$amount' ELSE INSERT INTO $ONCALL_TABLE (uid, start_time, end_time, amount) VALUES ('$contextUser','$onStr', '$offStr', '$amount') END IF"; 

錯誤消息: 無法執行查詢:您的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法使用近「IF EXISTS(SELECT * FROM timesheet_oncall其中uid =」管理員AND submitid =‘136545’在行1

+0

你已經[escaped](http://bobby-tables.com/php)'$ contextUser'和注入到你的SQL的其他變量,對吧?不使用佔位符構造查詢是災難的祕訣。 – tadman 2013-04-08 21:11:25

回答

2

REPLACE INTO是你所需要的手冊。 http://dev.mysql.com/doc/refman/5.0/en/replace.html

更換作品酷似INSERT,不同之處在於,如果一個老行的表具有相同的值作爲一個主鍵或唯一索引的新行,舊行插入新行之前刪除。

在你的情況下

REPLACE INTO 
$ONCALL_TABLE (uid, start_time, end_time, amount) 
VALUES ('$contextUser','$onStr', '$offStr', '$amount') 
WHERE uid='$contextUser'; 

假設uidPRIMARY KEYUNIQUE KEY

注:因爲在你的問題中的代碼包含SQL注入漏洞,我建議你閱讀這篇文章。 http://php.net/manual/en/security.database.sql-injection.php

+0

如果存在(選擇...)替換爲? – rubberchicken 2013-04-08 21:08:18

+0

謝謝!很有幫助 – rubberchicken 2013-04-08 21:35:04