首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP覆盖循环中的错误并继续执行下一条语句

PHP覆盖循环中的错误并继续执行下一条语句
EN

Stack Overflow用户
提问于 2013-06-07 21:09:44
回答 2查看 1.5K关注 0票数 1

我正在使用PHP脚本将数据批量插入到MySQL表中。如何使脚本跳过任何抛出错误的查询并继续下一个查询。例如,如果字段slug接受唯一值,而我尝试插入相同的值两次,它将抛出duplicate entry for key slug错误,脚本将停止执行。

我怎样才能让它继续到下一条语句?

下面是一个代码示例:

代码语言:javascript
复制
for ($row = $begin_row; $row <= $highestRow;  $row++) {
    $sql = sprintf("INSERT INTO ".$dbprefix."terms (name, slug, term_group) VALUES (%s, %s, %s)",
       GetSQLValueString($name, "text"),
       GetSQLValueString($slug, "text"), 
       GetSQLValueString(0, "int"));
    $result = mysql_query($sql) or die(mysql_error());
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-07 21:22:43

如何让脚本跳过任何抛出错误的查询

这样做将是一个非常糟糕的想法。如果查询抛出错误,那么要么是数据错误,要么是代码错误。

查看您提供的代码(它没有批量插入),它将抛出重复键的错误-这可能不是处理过程中的有效错误-为了处理这个问题,您应该修改您的代码:

代码语言:javascript
复制
$sql = sprintf("INSERT IGNORE INTO "...

虽然可能有合法的理由忽略其他错误,但您应该只显式忽略您知道是有效情况的错误,例如

代码语言:javascript
复制
    if (!$result = mysql_query($sql)) {
        $err=mysql_errno();
        $msg="error " . $err . "\nin $sql\n\n" . mysql_error();
        if (!array_key_exists($err, $aceptable_error) {
           die("Failed: $msg");
        } else {
           print "warning: $msg";
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2013-06-07 21:12:24

只需删除代码or die(mysql_error());

当您获得mysql_error时,您将什么也不做并转到下一个查询。

代码语言:javascript
复制
for ($row = $begin_row; $row <= $highestRow;  $row++) {
    $sql = sprintf("INSERT INTO ".$dbprefix."terms (name, slug, term_group) VALUES (%s, %s, %s)",
       GetSQLValueString($name, "text"),
       GetSQLValueString($slug, "text"), 
       GetSQLValueString(0, "int"));
    $result = mysql_query($sql); //possible error thrown, but we will do nothing in this case
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16984988

复制
相关文章

相似问题

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