1

您好我正在通过脚本导入 csv 表结构如下

`contact_id` int(11) NOT NULL auto_increment,
  `contact_first` varchar(255) character set latin1 default NULL,
  `contact_last` varchar(255) character set latin1 default NULL,
  `contact_email` varchar(255) character set latin1 default NULL,
  PRIMARY KEY  (`contact_id`)

csv中的数据是这样的

Jim,Smith,jim@tester.com
Joe,Tester,joe@tester.com

我用于插入的查询如下

mysql_query("INSERT IGNORE INTO contacts (contact_first, contact_last, contact_email) VALUES
                (
                    '".addslashes($data[0])."',
                    '".addslashes($data[1])."',
                    '".addslashes($data[2])."'
                )
            ");

我在查询中使用了忽略功能,但它不起作用,它继续插入相同的值

4

3 回答 3

0

IGNORE关键字只会对重复行产生您想要的影响。

仅当您在相应列上有主键或唯一键时,才会将行识别为重复。

您还没有真正解释确切的问题是什么,但我怀疑您可能想在contact_email列上创建一个唯一键以防止插入重复项。

我还建议至少使用mysql_escape_string而不是addslashes确保正确编码字符串。

关于 mysql_* 函数已被弃用的事实可能会有评论,因此您应该查看 PDO 或 mysqli_* 函数。

于 2013-03-26T05:43:38.327 回答
0

如果使用 IGNORE 关键字,则执行 INSERT 语句时发生的错误将被视为警告,而不是参考DOCS

于 2013-03-26T05:45:45.347 回答
0

IGNORE的用途是:

If you use the IGNORE keyword, errors that occur while executing the INSERT statement are treated as warnings instead. For example, without IGNORE, a row that duplicates an existing UNIQUE index or PRIMARY KEY value in the table causes a duplicate-key error and the statement is aborted. With IGNORE, the row still is not inserted, but no error is issued.

在您的情况下,您将插入三个相同的值,但作为 IDauto incremental 将插入具有相同值的新记录,这是显而易见的。如果要阻止它插入数据库,则必须将唯一索引添加到另一列之一

希望它会有所帮助!

于 2013-03-26T05:47:35.270 回答