我正在使用PHP脚本将数据批量插入到MySQL表中。如何使脚本跳过任何抛出错误的查询并继续下一个查询。例如,如果字段slug接受唯一值,而我尝试插入相同的值两次,它将抛出duplicate entry for key slug错误,脚本将停止执行。
我怎样才能让它继续到下一条语句?
下面是一个代码示例:
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());
}发布于 2013-06-07 21:22:43
如何让脚本跳过任何抛出错误的查询
这样做将是一个非常糟糕的想法。如果查询抛出错误,那么要么是数据错误,要么是代码错误。
查看您提供的代码(它没有批量插入),它将抛出重复键的错误-这可能不是处理过程中的有效错误-为了处理这个问题,您应该修改您的代码:
$sql = sprintf("INSERT IGNORE INTO "...虽然可能有合法的理由忽略其他错误,但您应该只显式忽略您知道是有效情况的错误,例如
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";
}
}发布于 2013-06-07 21:12:24
只需删除代码or die(mysql_error());
当您获得mysql_error时,您将什么也不做并转到下一个查询。
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
}https://stackoverflow.com/questions/16984988
复制相似问题