我有一个 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/