您好我正在通过脚本导入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])."'
)
");
我在查询中使用了忽略函数,但它不起作用并且保持插入相同的值
答案 0 :(得分:0)
IGNORE
关键字只会对重复的行产生所需的影响。
如果您在相应的列上有主键或唯一键,则只会将行识别为重复行。
您尚未真正解释问题的确切原因,但我怀疑您可能希望在contact_email
列上创建唯一键以防止插入重复项。
我还建议至少使用mysql_escape_string
代替addslashes
来确保字符串编码正确。
可能会对不推荐使用mysql_ *函数这一事实发表评论,因此您应该查看PDO或mysqli_ *函数。
答案 1 :(得分:0)
如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告 请参阅DOCS
答案 2 :(得分: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.
在你的情况下,你插入三个相同但值为auto incremental
的值,这将插入具有相同值的新记录,这是显而易见的。
如果要阻止它插入数据库,则必须将唯一索引添加到其他列