Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL插入查询赢得';如果已经存在,请不要插入_Php_Mysql_Sql_Unique_Sql Insert - Fatal编程技术网

PHP MySQL插入查询赢得';如果已经存在,请不要插入

PHP MySQL插入查询赢得';如果已经存在,请不要插入,php,mysql,sql,unique,sql-insert,Php,Mysql,Sql,Unique,Sql Insert,我一直在做一些研究,但不幸的是,我没有发现任何我能够发挥作用的东西,我认为这是因为我没有理解我所看到的示例中的MySQL结构 我要做的是运行一个insert查询,检查3个特定列中的值以确保它们不存在,然后insert,否则什么都不做 我的表非常基本:id(int11)、user(varchar(45))、label(varchar(255))、agent(varchar(255))、empid(varchar(10)) 我的id是我的主id,具有自动递增功能,下面是我目前使用的代码,可以插入,但

我一直在做一些研究,但不幸的是,我没有发现任何我能够发挥作用的东西,我认为这是因为我没有理解我所看到的示例中的MySQL结构

我要做的是运行一个insert查询,检查3个特定列中的值以确保它们不存在,然后insert,否则什么都不做

我的表非常基本:id(int11)、user(varchar(45))、label(varchar(255))、agent(varchar(255))、empid(varchar(10))

我的id是我的主id,具有自动递增功能,下面是我目前使用的代码,可以插入,但没有处理重复的代码:

$i = 0;
foreach ($agents as $ag){
    $sql = mysql_query("INSERT INTO `pms_users` 
    (`id`,`user`,`label`,`agent`,`empid`)
     VALUES 
    (NULL, '$user','$group','$labels[$i]','$ag')");
    $i ++;
}

我需要检查的三列是$user、$group和$ag。

(user、label、empid)
添加唯一索引。那么数据库将不允许您创建重复项

ALTER TABLE pms_users
ADD UNIQUE INDEX (user, label, empid);

(用户、标签、empid)
添加唯一索引。那么数据库将不允许您创建重复项

ALTER TABLE pms_users
ADD UNIQUE INDEX (user, label, empid);

如果用户、标签和代理的每个组合只能有一行,则应将它们定义为唯一约束:

ALTER TABLE pms_users ADD CONSTRAINT pms_users_unq UNIQUE (`user`, `label`, `agent`);
然后让数据库使用insert ignore语句完成繁重的工作:

INSERT IGNORE INTO `pms_users`
(`user`, `label`, `agent`, `empid`)
VALUES ('some_user', 'some_label', 'some_agent', 123)

如果用户、标签和代理的每个组合只能有一行,则应将它们定义为唯一约束:

ALTER TABLE pms_users ADD CONSTRAINT pms_users_unq UNIQUE (`user`, `label`, `agent`);
然后让数据库使用insert ignore语句完成繁重的工作:

INSERT IGNORE INTO `pms_users`
(`user`, `label`, `agent`, `empid`)
VALUES ('some_user', 'some_label', 'some_agent', 123)

您可以尝试在重复密钥更新查询中插入。。它检查重复的钥匙。如果存在MySQL,则执行更新查询;如果不存在MySQL,则执行插入查询。 当然,在数据库中应该声明唯一的密钥。 下面是本案例的MySQL文档

您可以尝试在重复密钥更新查询中插入。。它检查重复的钥匙。如果存在MySQL,则执行更新查询;如果不存在MySQL,则执行插入查询。 当然,在数据库中应该声明唯一的密钥。 下面是本案例的MySQL文档

您不能运行一个特定于插入目标的select查询作为插入测试吗?您应该停止使用
mysql
扩展。它已被弃用多年,并在PHP7中被完全删除。切换到
mysqli
PDO
,并学习使用准备好的语句来防止SQL注入。感谢Barmar-除了提供最佳实践之外,我非常感谢您提供的以下示例。唯一索引的工作原理与我所需要的一样。此外,我在其他项目中使用PDO,并使用预先准备好的语句,但在获得新硬件之前,我只能使用当前的mysql版本,所以我不得不接受mysql\u real\u escape来清理任何自由形式的输入。你不能运行一个特定于插入目标的select查询作为插入测试吗?你应该停止使用
mysql
扩展。它已被弃用多年,并在PHP7中被完全删除。切换到
mysqli
PDO
,并学习使用准备好的语句来防止SQL注入。感谢Barmar-除了提供最佳实践之外,我非常感谢您提供的以下示例。唯一索引的工作原理与我所需要的一样。此外,我在其他项目中使用PDO,并使用预先准备好的语句,但在我们获得新硬件之前,我只能使用当前的mysql版本,因此我必须接受mysql_real_escape来清理任何自由形式的输入。感谢Mureinik,我非常欣赏这个示例。我可以通过添加上面Barmar指定的“唯一索引”来实现这一点,但是您能告诉我唯一索引和唯一约束之间的区别吗?除了让它按应有的方式工作之外,我非常想学习最佳实践。谢谢Mureinik,我真的很欣赏这个例子。我可以通过添加上面Barmar指定的“唯一索引”来实现这一点,但是您能告诉我唯一索引和唯一约束之间的区别吗?除了让它按应有的方式工作之外,我非常想学习最佳实践。