【发布时间】:2017-12-24 08:06:17
【问题描述】:
我需要更新数据库中的一条记录,但我不知道该记录是否已经存在。如果存在,更新它,否则插入它。现在我想出了这个代码:
1: <?php
2: $query = "UPDATE user_meta SET active = '0' WHERE user_id = '125'";
3: $mysqli->query($query);
4:
5: if($mysqli->affected_rows == 0){
6: $query = "INSERT INTO user_meta (user_id, active) VALUES ('125', 0)";
7: $mysqli->query($query);
8: }
桌子:
CREATE TABLE `user_meta` (
`user_id` int(11) DEFAULT NULL,
`active` tinyint(4) DEFAULT NULL,
UNIQUE KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这段代码对我来说运行良好,但它实际上会产生一个我忽略的错误。
问题出在5这一行。如果没有任何更改,即使记录已经存在,affected_rows 是0。但这会触发 INSERT 语句。这个失败是因为 user_id 字段是唯一的,现在我忽略了这一点,所以我的代码工作正常。
但这是要走的路吗? 还是我应该先做一个选择然后更新或插入?
【问题讨论】:
-
将 user_id 设为 int 而不是字符串并检查
-
在执行插入或更新之前,只需触发一个
SELECT query to get count for this user id。如果计数为 1,则执行更新,否则执行插入。