Sql或MySql语句产生解析错误

时间:2014-05-15 20:38:07

标签: javascript mysql sql

我正在关注本教程http://blogs.msdn.com/b/miah/archive/2008/02/17/sql-if-exists-update-else-insert.aspx我现在正处理的第一个更艰苦的声明......

我产生了错误,并且不确定附近意味着什么:

  

错误:ER_PARSE_ERROR:您的SQL语法中有错误;检查与MySQL服务器版本对应的手册,以获得正确的语法,使用附近' IF EXISTS(SELECT * FROM radio WHERE em =' someone@gmail.com' )UPDATE radio'在第1行

这是我的代码:

//var _={'em':'email@address.com','st':'radio_name'};
var mysqlquery=
"IF EXISTS (SELECT * FROM radio WHERE em='"+_.em+"') "+
    "UPDATE radio SET ("+
                        "em='"+_.em+"',"+
                        "st='"+_.st+"') WHERE em='"+_.em+"' "+
"ELSE "+
    "INSERT INTO radio VALUES ("+
                        "em='"+_.em+"',"+
                        "st='"+_.st+"')";

我原本以为错误来自我使用变量并启动/停止字符串但我没有看到明显的错误所以我的问题是:

这是mysql或sql的有效语法吗?我正在运行一个mysql数据库,我很想知道这个解析错误产生了什么样的问题

1 个答案:

答案 0 :(得分:0)

您有错误的教程或错误的数据库。本教程适用于mssql,您正在运行mysql。

在mysql中你可以使用REPLACE来解决这个问题 http://dev.mysql.com/doc/refman/5.5/en/replace.html

<强>更新

您必须传递主键才能替换或查询插入,因为如果您不这样做,mysql将不会重复。您也可以为em添加一个唯一索引,然后您不需要额外的主键。

尝试类似:

"REPLACE INTO radio 
 VALUES (
      SELECT id,'"+_.st+"','"+_.em+"' FROM radio WHERE em='"+_.em+"'
 )"

考虑id是你的主键。

重要提示:您的选择必须与列数相匹配,因此如果您有其他列,则选择它们就像ID一样。