gpt4 book ai didi

php - 防止 mysql 数据库中的重复行,IGNORE 不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:13 25 4
gpt4 key购买 nike

我正在尝试防止将重复行插入到 mysql 数据库中。表名是收藏夹,我的表中有两列:company_id 和 user_id,我想防止用户尝试将同一家公司作为“收藏夹”添加到数据库中两次。

这是我尝试过的:

$query  = "INSERT IGNORE INTO favorites (item_id, user_id) VALUES ( $item_id, $user_id )";
mysql_query($query,$conn);

但是不起作用。

我也尝试过'alter table'来添加一个主键,但是,我需要user_id和item_id都是键,因为同一个收藏项可以被多个'user_id'和同一个'user_id'收藏可以插入许多不同的收藏项,以便可以“复制”数据,但我试图防止完全相同的“user_id”和“item_id”被插入两次。

我很感激任何帮助。

最佳答案

我知道的最简单的方法是在 user_id-item_id 对上添加 UNIQUE 约束,这将通过以下查询完成:

ALTER TABLE favorites 
ADD UNIQUE(item_id,user_id)

每当您尝试插入表中已存在的 user_id-item_id 对时,您的插入查询就会返回错误,因此您的 INSERT 查询应该这样修改:

INSERT INTO favorites(item_id,user_id) 
VALUES ($item_id,$user_id)
ON DUPLICATE KEY UPDATE item_id=item_id

我不推荐使用“INSERT IGNORE”,因为它会忽略所有错误。每当它检测到重复键时,我的查询将简单地设置 item_id=item_id(不变),因此数据不会重复。

我也强烈建议您考虑使用 MySQLi而不是 mysql_* 函数。如果您忘记检查这两个用户输入变量,您发布的 PHP 很容易受到 mysql 注入(inject)的影响。出于同样的原因,甚至 PHP 手册也积极劝阻这些函数。

关于php - 防止 mysql 数据库中的重复行,IGNORE 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177992/

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