我正在尝试在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行
答案 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';
假设uid
是PRIMARY KEY
或UNIQUE KEY
注意:由于您的问题中的代码包含SQL注入漏洞,我建议您阅读本文。 http://php.net/manual/en/security.database.sql-injection.php