2009-12-21 69 views
1

我有一个PHP foreach循环和一个mysql插入语句里面。循环将数据插入到我的数据库中。我从来没有遇到过这个问题,但我认为发生的事情是插入死亡(我插入后没有“死亡”声明),当它到达重复记录。即使表格中可能有重复记录,我仍然需要继续。有什么我需要指定要做到这一点?mysql继续出错

我将一些记录从一个表格转移到另一个表格。现在,我在表#1中有20条记录,而在表#2中只有17条记录。我缺少3条记录,但其中只有一条是重复的,违反了表上的约束条件。其他两个记录应该已经添加。有人能给我一些建议吗?

+0

请问您是否回应查询并将它们发布在此处?我怀疑查询有问题。 – 2009-12-21 12:29:32

+0

您需要添加更多信息,例如两个表的关键结构以及复制行的查询。我同意下面的答案,你需要弄清楚为什么插入失败......一种方法是绕过你已知的问题记录(crufty),这样你就可以看到其他人失败的原因。 – r00fus 2009-12-21 21:09:21

回答

0

不会引起你的好办法应该弄清楚什么是错的,但只是阻止它dieing尝试在功能解决此

@mysql_query = ... 
+0

我已经试过,但它不起作用。 :( – john 2009-12-21 11:04:48

0

一种方法前添加@是简单地查询数据库您即将插入的记录。这样,当您尝试插入重复记录时,您的一系列查询不会死亡。

一个稍微有效的解决方案是查询[i]您要在一个查询中插入的记录的所有[/ i],删除所有重复项,然后插入新记录。

0

您是否用一条INSERT语句插入多行?

INSERT INTO xyz (x,y,z) VALUES 
    (1,2,3), 
    (2,3,5), 
    (3,4,5), 
    (4,5,6) 

那么你可能要考虑prepared statements
...或添加关键字无视你的INSERT语句

INSERT IGNORE INTO xyz (x,y,z) VALUES 
    (1,2,3), 
    (2,3,5), 
    (3,4,5), 
    (4,5,6) 

http://dev.mysql.com/doc/refman/5.0/en/insert.html说:

如果使用忽略关键字,错误执行INSERT语句时发生的错误将被视为警告

您仍然可以获取警告,但插入不会中止。

0

INSERT INTO FOO (ID,BAR) VALUES(1,2),(3,4) ON DUPLICATE KEY UPDATE BAR = VALUES(BAR)

1

发生了什么事是,PHP是扔一个警告当mysql插入失败并停止该警告。以实现自己的目标,最好的办法是:

  1. 创建一个自定义异常处理程序
  2. 设置PHP使用异常处理程序的警告。
  3. 将插入尝试换成try/catch
  4. 当您捕获异常/警告时,请记录或输出mysql错误,但继续执行脚本。

这将允许您的脚本在不停止的情况下继续,同时向您解释问题。