在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.");