在PHP脚本中处理错误并继续执行
我不想“死()”,因为它只涉及脚本的一小部分,我尝试了:在PHP脚本中处理错误并继续执行,php,execution,die,Php,Execution,Die,我不想“死()”,因为它只涉及脚本的一小部分,我尝试了: $result = mysql_query($sql) or echo("error with responses"); 但它产生了一个错误。如何发出错误消息并继续执行脚本的其余部分,因为即使它无法连接,其余部分也不会受到影响 就你原来的问题标题而言,你不能。die和exit的目的是终止脚本处理。如果不想终止脚本处理,请不要调用die或exit 在抑制错误输出方面,可以使用(@)但最好使用。(如果以这种方式抑制错误,则必须自己检查错误状
$result = mysql_query($sql) or echo("error with responses");
但它产生了一个错误。如何发出错误消息并继续执行脚本的其余部分,因为即使它无法连接,其余部分也不会受到影响 就你原来的问题标题而言,你不能。
die
和exit
的目的是终止脚本处理。如果不想终止脚本处理,请不要调用die
或exit
在抑制错误输出方面,可以使用(@
)但最好使用。(如果以这种方式抑制错误,则必须自己检查错误状态。)
例如,您可以使用:
$result = @mysql_query($sql);
if(is_resource($result)) {
// The query worked...
}
else {
// Handle error state, perhaps using mysql_error
}
但是,为了说明这一点,决不要随意地将错误抑制器添加到函数调用中。您必须确保自己正确处理任何潜在错误。检查mysql\u查询的返回类型
$result = mysql_query($sql);
if(mysql_error()) {
echo "Error: " . mysql_error();
}
$result = mysql_query($sql);
if ($result===false) {
echo 'The Query failed';
}
//> Continue
您可以关闭错误报告,但无论如何都要在生产环境中关闭
error_reporting(0);
它仍然会抛出错误,但不再显示
不过,这很不寻常。我想不出一个为什么要接受mySQL错误的原因——如果问题是坏了的SQL,您通常会事先捕获它。您应该查看try/catchnot die()或exit
Echo不能用于逻辑比较,例如您尝试执行的操作。您应该改用print,这不会导致PHP错误。您不必使用
die
作为第二个函数调用,它只是在几乎所有的mysql\u query
教程中作为惯例使用
我们所做的只是计算一个布尔表达式<代码>$result=$a或$b。如果$a
的值为true,那么我们永远不会执行$b
,因为我们不需要执行。我们已经满足了逻辑上的或,运算符的一侧为true,这就是我们所需要的
该函数立即退出脚本并显示一条消息。您可以使用自己的函数替换它,以打印一条漂亮的错误消息,并在不退出的情况下继续执行脚本,例如:
function my_error_function($status) {
echo "ERROR: $status";
}
$result = mysql_query($sql) or my_error_function("Uhoh. There was a problem executing $sql.");
这个问题的标题差点让我得了动脉瘤。看,这是一个获取观点/回答的标题。通常,只有致命错误(通常是语法错误等)才能终止脚本。你收到的具体错误信息是什么?事实上,很有趣,我在看了问题列表之后,没有注意到我的标题。lol我不想因为mysql错误而终止脚本。我想继续执行脚本的其余部分,即使它无法从db获取数据。我已经更新了标题,因为上一个标题看起来(充其量)不相关。:-)MySQL错误可能是好的-例如,如果您得到一个重复的密钥错误,您会向用户显示一条消息,说明他们的用户名/URL/任何已经存在的内容,然后继续。@ceejayoz我倾向于事先捕捉到这一点。我不喜欢向最终用户显示原始SQL错误消息,即使无法访问服务器也不喜欢。您不必显示原始错误消息。使用mysql\u errno()
找出错误是什么,然后处理它。@ceejayoz是的,那么我们就在同一页了。我认为您的意思是将错误直接传递给用户唉,陈旧的mysql扩展不会抛出异常,因此没有什么可尝试/捕获的。如果使用PDO,这是正确的。@charles:使用包装层使其抛出异常或使用errorexceptions的另一个原因。所以有办法让它工作…谢谢,这正是我想要的@netrox接受此答案,您的接受率将更高。我等待10分钟到期:/
function my_error_function($status) {
echo "ERROR: $status";
}
$result = mysql_query($sql) or my_error_function("Uhoh. There was a problem executing $sql.");