2013-11-20 83 views
0

我正在編寫一個使用php/MySQL的應用程序。我得到一個場景,我需要更新記錄,如果它存在,但如果它不存在,然後插入一條新記錄。如何檢測在MySQL和php中是否修改了記錄

請注意,我不能添加唯一索引,所以我不能使用REPLACE或INSERT INTO ... ON DUPLICATE KEY UPDATE。我也不知道我正在更新的記錄的主鍵。

這是我的update語句

UPDATE surveys_answers_controller               
SET controller_id = $field['answer'] 
WHERE group_id = $group_id AND question_id = $field['question_id'] 

注意到,無論是GROUP_ID也不question_id在這個表的主鍵,但一個外鍵。

我試圖使用$ db-> lastInsertId(),但它總是返回1,它更新記錄與否。我不知道爲什麼!

這就是我試圖

$update_answer = $db->processQuery('UPDATE surveys_answers_controller 
SET controller_id = ? 
WHERE group_id = ? AND question_id = ? ', 
array($field['answer'], $group_id, $field['question_id'])); 

$last_id = $db->lastInsertId(); 
if(empty($last_id)){ 
$update_answer = $db->processQuery('INSERT INTO surveys_answers_controller(controller_id, group_id, question_id)VALUES(?,?,?)', 
array($field['answer'], $group_id, $field['question_id']));   
} 

$ last_id總是返回1由於某種原因,它是否做了修改記錄或沒有,這就是爲什麼insert語句被忽略。

我正在使用PDO連接到數據庫而不是mysqli。

如何編寫一個查詢來檢查現有記錄,如果存在則更新它,否則會插入它?

感謝

回答

0

使用PDOStatement::rowCount()而不是$db->lastInsertId。這找到了上次更新/插入/刪除所影響的行數。如果爲零,則執行插入操作。

+0

我正在使用PDO連接到數據庫,而不是mysqli – Jaylen

+0

更新了答案 – topher

+0

啊哈!這就對了。非常感謝你。我討厭容易的問題成爲挑戰! – Jaylen

相關問題