首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql出现错误时继续

mysql出现错误时继续
EN

Stack Overflow用户
提问于 2009-12-21 19:00:59
回答 5查看 1.6K关注 0票数 1

我有一个PHP foreach循环和一个mysql insert语句。循环将数据插入到我的数据库中。我以前从未遇到过这个问题,但我认为发生的情况是,当insert到达重复记录时,insert会死掉(我在insert后没有"or die“语句)。即使表中可能有重复的记录,我也需要继续。要执行此操作,需要指定什么内容吗?

我正在将一些记录从一个表转移到另一个表。现在,我在表#1中有20条记录,在表#2中只有17条记录。我丢失了3条记录,但只有一条记录是重复的,这违反了表的约束。应该已经添加了另外两条记录。有人能给我一些建议吗?

EN

回答 5

Stack Overflow用户

发布于 2009-12-22 11:20:04

发生的情况是,当mysql插入失败时,PHP抛出一个警告,并在出现该警告时停止。实现目标的最好方法是:

  1. 创建自定义异常处理程序
  2. 将PHP设置为使用异常处理程序处理警告。
  3. 捕获异常/警告时,将插入尝试包装到try / catch
  4. 中,记录或输出mysql错误,但继续执行脚本。

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

票数 1
EN

Stack Overflow用户

发布于 2009-12-21 19:13:29

解决这个问题的一种方法是,简单地查询数据库,查找要插入的记录。这样,当您尝试插入重复记录时,您的一系列查询将不会终止。

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

票数 0
EN

Stack Overflow用户

发布于 2009-12-21 20:24:10

是否使用一条insert语句插入多行?

代码语言:javascript
复制
INSERT INTO xyz (x,y,z) VALUES
  (1,2,3),
  (2,3,5),
  (3,4,5),
  (4,5,6)

然后,您可能需要考虑prepared statements

...or将IGNORE关键字添加到INSERT语句

代码语言:javascript
复制
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语句时发生的错误将被视为警告,而不是

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1939461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档