【问题标题】:Importing XML and Skipping Errors (PHP)导入 XML 和跳过错误 (PHP)
【发布时间】:2014-10-10 18:48:26
【问题描述】:

我有一个 CRON 作业,每天晚上运行以通过多个 XML 文件更新我们的库存系统(从外部来源)。

但是,有时会在 XML 中出现错误(对此我无能为力 - 第三方提供了这一点)。

当确实发生错误时,脚本会停止,不再处理任何文件。有没有办法,如果遇到错误,仍然导入剩余的文件?

这是我的代码:

<?php include 'connect.php'; 


$sql = "DELETE FROM stock WHERE allow_keep!='1'";
mysql_query($sql);

//clear stock table then loop through and add all active users


$query = "SELECT * from users where active='1'";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){ 


$xml = simplexml_load_file(“users/XML_FILE_”.$row['id'].".xml");

foreach($xml->children() as $child)
{


$myquery="REPLACE into stock set 
StockID='" . $child->stockid . 
"', Make='" . addslashes($child->make) . 
"', Model='" . addslashes($child->model) . 
"', image='" . $child->image_url_1 . 
"', details='" . addslashes($child->description) . 
"', price='" . $child->price . 
"'";

$result2=mysql_query($myquery) or die(mysql_error());   




 }

}


?>

感谢我能得到的任何帮助!

【问题讨论】:

    标签: php mysql xml error-handling


    【解决方案1】:

    如果是 simplexml 中断进程,只需告诉它deal with errors internally 而不是输出它们

    libxml_use_internal_errors(true);
    
    $xml = simplexml_load_file(“users/XML_FILE_”.$row['id'].".xml");
    if($xml) {
        // format is fine, try to load it.
    } else {
        // leave something in your error log or something
    }
    

    如果是 mysql,那么您可以将替换查询包装在 try / catch 块中。

    顺便说一句,不要使用 mysql 函数。使用 mysqli 或(更好的)PDO 函数。如果你害怕学习曲线,从 PDO::exec 开始,它不是 PDO 最优雅的部分,但如果你习惯于手动使用变量插值进行查询,它实际上是一个替代品。

    尝试在中期构建准备好的查询,这将获得十倍的回报。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      相关资源
      最近更新 更多