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

Posted

技术标签:

【中文标题】mysql如果存在给出错误错误的语法?【英文标题】:mysql if exists giving error wrong syntax? 【发布时间】:2013-04-08 20:58:06 【问题描述】:

我正在尝试在 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 服务器版本相对应的手册,以在第 1 行的 'IF EXISTS (SELECT * FROM timesheet_oncall WHERE uid='admin' AND submitid='136545' 附近使用正确的语法

【问题讨论】:

您已经将escaped $contextUser 和其他变量注入到您的SQL 中,对吧?在不使用占位符的情况下构建查询是灾难的根源。 【参考方案1】:

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

【讨论】:

如果存在(选择...)替换成?

以上是关于mysql如果存在给出错误错误的语法?的主要内容,如果未能解决你的问题,请参考以下文章

带有子查询的 MySQL 删除给出了语法错误

表创建时的 MySQL 语法错误

如果列不存在,则无法添加?

MySQL 是不是支持“如果存在”?

MySQL插入不存在/如果不存在

无法在 MySQL 语法错误中运行查询意外