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

时间:2013-11-20 23:02:45

标签: php mysql insert-update

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

请注意,我无法添加唯一索引,因此我无法使用REPLACE或INSERT INTO ...在DUPLICATE KEY 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。

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

由于

1 个答案:

答案 0 :(得分:0)

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