如何检测记录是否在MySQL和php中被修改


How to detect if a record has been modified in MySQL and php

我正在使用php/MMySQL编写应用程序。我遇到了一个场景,如果记录存在,我需要更新它,但如果它不存在,则插入一个新记录。

请注意,我不能添加唯一索引,所以我不能使用REPLACE或INSERT INTO。。。在重复密钥更新时。我也不知道我试图更新的记录的主键。

这是我的更新声明

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。

我如何编写一个查询来检查现有记录,如果存在,它会更新它,否则它会插入它?

感谢

使用PDOStatement::rowCount()而不是$db->lastInsertId。这会查找受上次更新/插入/删除影响的行数。如果为零,则执行插入操作。