这是我的MySQL表:
我将数据插入表中,如下所示:
$stmt = $db->prepare("INSERT INTO likes (user_id,post_id) VALUES (?,?)");
$stmt->execute(array($_SESSION['user'],$_POST['id']));
这很好用,但是你可以看到MySQL表有两个相同的行(id为3& 4),它们的user_id为5,post_id为196.换句话说,我的MySQL表记录了用户的id = 5喜欢id = 196 两次的帖子。我如何禁止有两行具有相同的user_id的和相同的post_id
的情况答案 0 :(得分:4)
您需要在user_id和post_id列
上设置unique constraint答案 1 :(得分:1)
以下答案可能会导致Race Conditions,并且在某些情况下可能会重复数据库条目。
感谢@Martin找到以下系统中的主要缺陷:
这是你应该在业务逻辑中做的事情。我实现一个几乎相同的系统的方式是这个(在伪代码中):
Show Blog/Video/Post/Etc.
Has user "liked" this?
Yes = show "unlike" button (on server, not JS)
No = show "like" button (on server, not JS)
Add or delete "like" as necessary
显示任一按钮的代码在服务器上,因此用户无法拦截它并手动选择要执行的操作。
唯一的缺陷是必须有一种方法来识别用户点击的按钮,这意味着用户可能花费大量时间挖掘和摆弄,并可能更改页面上的按钮/链接/任何内容。
我通过在服务器上测试用户是否已经喜欢,然后仅在他们没有喜欢时插入来克服这个问题。
答案 2 :(得分:0)
CREATE UNIQUE INDEX user_post on likes (user_id, post_id)
这可以防止多次使用相同的(user_id,post_id)值...