php - 导入 XML 并跳过错误 (PHP)

标签 php mysql xml error-handling

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

但是,有时会出现 XML 中出现错误的情况(对此我无能为力 - 第 3 方提供了此功能)。

当发生错误时,脚本将停止并且不再处理任何文件。有没有一种方法,如果遇到错误,仍然导入剩余的文件?

这是我的代码:

<?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());   




 }

}


?>

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

最佳答案

如果是 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 block 中。

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

尝试在中期建立准备好的查询,这将带来十倍的返回。

关于php - 导入 XML 并跳过错误 (PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25353431/

相关文章:

android - 如何使android actionbar背景图像重复x和y

java - 我无法使用 aries jpa/v2.0.0 和 transactions/v2.0.0

php - 如何通过更改通过引用传递的参数来对调用具有副作用的函数的方法进行单元测试?

php - 将两个字符串加在一起的最佳方法是什么?

mysql - 如果 MySQL 没有足够的空间用于临时表,会发生什么情况?

php - 我的照片应该在哪里,奇怪的符号?

xml - 如何使 Xml 模式中的元素成为可选元素

php - 使用 PHP 删除 Amazon S3 中的文件夹

php - Greasemonkey 脚本将 JavaScript 变量与另一个页面的内容进行比较?

mysql - 对一个表求和,其中的列与另一个表相匹配,然后连接结果