mysql继续出错

时间:2009-12-21 11:00:59

标签: php mysql

我有一个PHP foreach循环和一个mysql插入语句。循环将数据插入我的数据库。我之前从未遇到过这个问题,但我认为发生的事情是插入模块(插入后我没有“或死”语句)到达重复记录时。即使表中可能有重复的记录,我还需要继续。有什么我需要指定来做这件事吗?

我正在将一些记录从一个表转移到另一个表。现在,我在表#1中有20条记录,在表#2中只有17条记录。我缺少3条记录,但只有一条是重复的,这违反了桌子上的约束。应该添加另外两个记录。有人可以在这里给我一些建议吗?

5 个答案:

答案 0 :(得分:1)

正在发生的事情是,当mysql插入失败并停止该警告时,PHP会发出警告。实现目标的最佳方法是:

  1. 创建自定义异常处理程序
  2. 将PHP设置为使用异常处理程序进行警告。
  3. 将插入尝试包装到try / catch
  4. 当您捕获异常/警告时,请记录或输出mysql错误,但继续执行脚本。
  5. 这将允许您的脚本在不停止的情况下继续,同时向您解释问题。

答案 1 :(得分:0)

不是一个好方法,因为你应该弄清楚什么是错的,但是为了防止它死亡,试着在函数前添加@

@mysql_query = ...

答案 2 :(得分:0)

解决此问题的一种方法是简单地在数据库中查询您要插入的记录。这样,在尝试插入重复记录时,您的一系列查询不会消失。

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

答案 3 :(得分:0)

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

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

然后您可能要考虑prepared statements
...或将IGNORE关键字添加到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说:

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

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

答案 4 :(得分:0)

插入FOO (身份证,BAR) VALUES(1,2),(3,4) 在DUPLICATE KEY UPDATE BAR = VALUES(BAR)