mysql如果存在给出错误的语法错误?

时间:2013-04-08 20:58:07

标签: mysql

我正在尝试在MySQL中使用IF EXISTS,但我一直在学习语法错误,我已经研究了正确的语法,但一切都没有用......

我需要的是: 如果查询存在,则UPDATE else INSERT new ...

$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 WHERE uid ='admin'和submitid ='136545'在第1行

1 个答案:

答案 0 :(得分:2)

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

  

REPLACE的工作原理与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。

在你的情况下

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