2017-08-27 99 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。

相關問題