gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:01:15 25 4
gpt4 key购买 nike

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

请注意,我无法添加唯一索引,因此无法在重复键更新时使用 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,这就是忽略插入语句的原因。

我使用 PDO 连接数据库而不是 mysqli。

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

谢谢

最佳答案

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

关于php - 如何在MySQL和php中检测记录是否被修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20108979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com