2017-08-27 104 views
0

我想更新一条记录(如果它存在或创建一条新记录,如果它不存在但不知何故它会抛出一个错误,我找不到原因)。SQL更新是否存在,如果不存在则插入不起作用

我想更新客户的状态(如果存在)或创建新客户(如果不存在)。

我的查询:

$sql = "SELECT CASE WHEN EXISTS (SELECT * FROM sms WHERE number = '123456789' AND customer_id = '1') THEN UPDATE sms SET stat = '1' ELSE INSERT INTO sms (number, customer_id, stat) values ('+32485386902', '1', '1') END" 

这将引发错误:

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near UPDATE sms SET stat = '1' ELSE INSERT INTO sms (number, customer_id, stat) value at line 1

但是如果我更改更新和插入到1和2这表明1,如果存在,或者2如果没有。

任何人都可以帮助我:)?非常感谢!

+0

也许我错了,但我认为SELECT会返回列并且不执行任何INSERT,UPDATE或DELETE查询。但是,使用MySQL,您可以使用REPLACE关键字来解决您的问题。但请记住,该解决方案将仅在mySQL环境中可用(如果您更改了RDBMS,则不起作用)。 –

+0

使数字成为主键,然后使用'insert into ... on duplicate update'。 – chris85

+0

除了'$ sql' var ..其中是'PHP'和'if-statement'? –

回答

1

添加第二个关键CUSTOMER_ID使这个工作:

$ sqlsms =“INSERT INTO短信(号码,CUSTOMER_ID,STAT)VALUES( '$电话', '$ compID', '$ smsPromo')在DUPLICATE KEY UPDATE上stat ='$ smsPromo'“;

0

在SELECT查询中,你总是必须有FROM子句。我建议你先写一个SELECT查询来知道记录是否存在,然后如果记录不存在,你可以运行INSERT else UPDATE。你不能在subquerys中使用SELECT * FROM sms,这是错误的sixtaxe。

相关问题