Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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 为什么不是';我的插入忽略代码不起作用吗?_Php_Mysql - Fatal编程技术网

Php 为什么不是';我的插入忽略代码不起作用吗?

Php 为什么不是';我的插入忽略代码不起作用吗?,php,mysql,Php,Mysql,我试图通过使用主键和INSERT IGNORE方法避免在表中插入重复的记录。如建议的那样@ 我将主键添加到表定义中,如下所示: mysql_connect("localhost", "root", "") or die(mysql_error()); mysql_select_db("flightSched") or die(mysql_error()); mysql_query("CREATE TABLE Alteration( id INT NOT NULL AUTO_INCREMENT,

我试图通过使用主键和INSERT IGNORE方法避免在表中插入重复的记录。如建议的那样@

我将主键添加到表定义中,如下所示:

mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("flightSched") or die(mysql_error());

mysql_query("CREATE TABLE Alteration(
id INT NOT NULL AUTO_INCREMENT, 

 timePeriod TIME default '00:00:00',
 depOrArriv VARCHAR(9),
 flightNo VARCHAR(9) NOT NULL,
 airline VARCHAR(20),
 dest VARCHAR(30),
 origin VARCHAR(30),
 depature VARCHAR(8),
 don VARCHAR(10),   
 arrivalTime VARCHAR(8),
 arrivalTimeSec VARCHAR(28),
 status VARCHAR(15) NOT NULL,

 image_type      varchar(25) not null default '',
 image           blob        not null,
 image_size      varchar(25) not null default '',
 image_name      varchar(50) not null default '',
PRIMARY KEY (id, flightNo, status)

)")
 or die(mysql_error());  

echo "Table Created!";
在下面找到插入忽略代码:

 mysql_query("INSERT IGNORE INTO Alteration 
                     (depOrArriv, flightNo, airline, origin, don, arrivalTime, arrivalTimeSec, status, image_type, image, image_size,                           image_name) 
                    VALUES('$depOrArriv', '$flightNo', '$airline', '$origin', '$don', '$arrivalTime', '$arrivalTime', '$status',                            '$image_type','$image', '$image_size', '$image_name' ) "); 
//                  or die(mysql_error());  

                    echo "Number of affected rows were: " . mysql_affected_rows();
在测试它时,我注意到它仍然插入重复的记录。 为什么它还在这样做?有人能帮我指出哪里出了问题吗

非常感谢您的帮助。
期待您的反馈。

您的
id
列是自动递增的,这意味着在键中使用每一行时,它实际上是唯一的。您应该检查插入的数据。您应该看到,每个重复行实际上都有一个单独的、不同的
id

您可以在
flightNo
status
上设置
UNIQUE
索引,以防止重复行

ALTER TABLE `Alteration` ADD UNIQUE (
    `flightNo` ,
    `status`
);
然后我建议您将主键减少为
id

更新 根据要求,这是代码的修改版本,具有用于防止重复的唯一索引:

mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("flightSched") or die(mysql_error());

mysql_query("CREATE TABLE Alteration(
 id INT NOT NULL AUTO_INCREMENT,
 timePeriod TIME default '00:00:00',
 depOrArriv VARCHAR(9),
 flightNo VARCHAR(9) NOT NULL,
 airline VARCHAR(20),
 dest VARCHAR(30),
 origin VARCHAR(30),
 depature VARCHAR(8),
 don VARCHAR(10),
 arrivalTime VARCHAR(8),
 arrivalTimeSec VARCHAR(28),
 status VARCHAR(15) NOT NULL,
 image_type varchar(25) not null default '',
 image blob not null,
 image_size varchar(25) not null default '',
 image_name varchar(50) not null default '',
 PRIMARY KEY (id),
 UNIQUE KEY `flightNo` (`flightNo`,`status`)
)") or die(mysql_error());

echo "Table Created!";

mysql_query("INSERT IGNORE INTO Alteration (depOrArriv, flightNo, airline, origin, don, arrivalTime, arrivalTimeSec, status, image_type, image, image_size, image_name) VALUES('$depOrArriv', '$flightNo', '$airline', '$origin', '$don', '$arrivalTime', '$arrivalTime', '$status', '$image_type','$image', '$image_size', '$image_name' )");

echo "Number of affected rows were: " . mysql_affected_rows();

您的
id
列是自动递增的,这意味着在键中使用每一行时,每一行实际上是唯一的。您说的“重复”是什么意思?您的
id
将是唯一的。或者这是关于其他“重复”字段的吗?在id为自动的复合键的情况下,不会有很多重复的主键increment@BrendanBullen例如值($depOrArriv,…)中的内容都来自HTML表单。我不希望最终用户插入表中已经存在的记录。最重要的不是航班号和身份。每个插入的记录的id实际上都是递增的,没有任何帮助。至少我不这么认为。也许你可以演示如何使用它来避免插入重复项?@SirBT请看我下面的答案-你可以在航班号和状态上设置一个唯一的索引,以防止重复项被插入Hanks Brendan Bullen,但我如何添加其余记录,如$airline、$origin等?对不起,我是MySQL的新手一旦添加了
UNIQUE
索引,这将改变您的表结构,以允许您编写的
INSERT IGNORE
语句工作。然后,您可以像以前一样使用所有相同的变量执行它,但索引将防止重复。您介意演示一下代码中的含义吗?期待您的回复。@SirBT我已经用您代码的修改版本更新了我的答案。您将看到,我在表创建脚本(主键下方)中添加了一个
唯一键
。感谢您为我指明了正确的方向。我真正想做的是避免在变更表中插入flightNo的重复项,但是更新属于同一flightNo的其他内容。我通过从表索引定义中删除状态来修复此问题。剩下的是:唯一键
flightNo
flightNo
)。我使用的mysql\u查询也是REPLACE-INTO-change。现在,在不添加flightNo重复项的情况下更新表的其余内容。干杯我希望这能帮助其他人。再次干杯!