gpt4 book ai didi

php - 使用 CodeIgniter 插入时重复

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

我有两个表 - 一个帖子表 Posts 和一个帖子集合表 Collections。当用户创建帖子时,我会将其插入数据库并更新相应的集合(用于基于更新时间排序的目的)。为了避免重复的帖子(通过用户操作或网络流失),我将检查是否存在相同的帖子(基于内容和作者)。但是,我仍然偶尔会收到重复的帖子(创建时间完全相同并且没有用户重复操作)。可能是什么原因 - CodeIgniter、事务或奇怪的网络状态?由于我明确检查了现有的相同帖子,我猜重复是由 trans_start()trans_complete() 之间的代码引起的。

    # check if a same post exists already within 1 hour
$sql="SELECT id FROM Posts WHERE content=? AND author_id=(SELECT id FROM Users WHERE username=? LIMIT 1) AND create_time >= DATE_SUB(NOW(), INTERVAL 1 HOUR) LIMIT 1";
$query=$this->db->query($sql, array($content, $username));
if($query->num_rows()>=1){
return 0;
}
# start post
$this->db->trans_start();
$sql="INSERT INTO Posts (content, author_id) VALUES (?, (SELECT id FROM Users WHERE username=? LIMIT 1))";
$this->db->query($sql, array($content, $username));
if($this->db->affected_rows()>0){
# update post collection update_time
$insert_id=$this->db->insert_id();
$sql="UPDATE Collections SET update_time=now() WHERE id=$collection_id";
$query=$this->db->query($sql);
if($this->db->affected_rows()>0){
$ret=$insert_id;
}else{
$ret=0;
}
}else{
$ret=0;
}
$this->db->trans_complete();
return $ret;

最佳答案

临时解决方法是在 (content, author_id, create_time) 列上添加一个唯一索引,启用 mysql 级别的检查。但是,我仍然不知道为什么会出现重复...

关于php - 使用 CodeIgniter 插入时重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29743518/

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