Php 如果记录不存在,则插入MySQL

Php 如果记录不存在,则插入MySQL,php,mysql,database,Php,Mysql,Database,我想在MySQL表中插入一条新记录,但只有在没有相同用户id的记录时才应该插入。此外,我想得到一个返回的布尔值,显示是否插入了新记录 The table like_id | user_id | post_id 1 | 1 | 3 2 | 5 | 3 3 | 12 | 5 示例 此查询插入blog\u post\u likes(post\u id,user\u id)值(3,1)应返回'false'/'0'/或具有相同含义的其他内容,因为已经存在具有相同用户id的记录。 但是

我想在MySQL表中插入一条新记录,但只有在没有相同用户id的记录时才应该插入。此外,我想得到一个返回的布尔值,显示是否插入了新记录

The table  
like_id | user_id | post_id  
1 | 1 | 3  
2 | 5 | 3  
3 | 12 | 5  
示例
此查询
插入blog\u post\u likes(post\u id,user\u id)值(3,1)
应返回'false'/'0'/或具有相同含义的其他内容,因为已经存在具有相同用户id的记录。 但是这个查询
插入blog\u post\u likes(post\u id,user\u id)值(3,34)
应该返回'true'/1/或者其他具有相同beaning的值,因为插入了新记录


我如何才能做到这一点?

您必须将两列都定义为主键。这样,如果插入相同的记录,MySQL将返回一个“重复条目”错误。您应该检查此处引用的错误代码1062:


必须在要唯一的列中创建唯一约束。在本例中,我们向列user\u id.提及

SQL命令:

CREATE TABLE blog_post_likes
(
post_id INT,
like_id INT,
user_id INT NOT NULL UNIQUE,
) 
当然,您可以更改现有表以避免丢失表中的现有数据

ALTER TABLE blog_post_likes ADD CONSTRAINT user_id UNIQUE (user_id)

在插入数据之前,请使用

SELECT * FROM blog_post_likes WHERE post_id=give_postid AND user_id=give_userid;
如果执行此查询返回一行,则表示用户已经喜欢该帖子。因此,不要执行insert查询

如果没有返回行,则执行Insert查询

你可以用
mysqli\u num\u rows()。你知道我的意思吗?@KingOfDog但一个用户只能喜欢一篇帖子,对吗?因此,这个选项是正确的,因为用户只能喜欢一篇文章。你可以省略like_id,因为这没有用。就像@Perry说的,用户可以通过这种方式为每个帖子创建一个like。否则,您不必使其唯一,但用户可以为同一帖子创建多个like。我认为这是您要防止的。@Perry我现在删除了like_id列,并创建了post_id和user_id主键。这很有效。