如果我使用这样的代码:
$update_result = mysqli_query( $link , $sql_update_login ) or die ('Unable to execute query. '. mysqli_error($link));
Run Code Online (Sandbox Code Playgroud)
它是否必须死亡或者您之后可以提出不同的查询?就像将错误日志写入另一个表的预定函数一样?如:
$update_result = mysqli_query( $link , $sql_update_login ) or function('$query, $error);
Run Code Online (Sandbox Code Playgroud)
'或'之后的其他选项有哪些?我没有在文档中找到它,任何线索都表示赞赏.
You*_*nse 61
它必须死吗?
相反,它不应该die()永远.
PHP是一种遗传性很差的语言.非常糟糕的遗传.并且or die()错误消息是最糟糕的基础之一:
die()没有提示发生错误的地方.在一个相对较大的应用程序中,找到它会非常痛苦.所以,永远不要使用die()mysql错误,即使是临时调试:有更好的方法.
对于您的查询,您有两个选择:
如果你要mysqli_query()在你的应用程序代码中使用所有方法(这是错误的,但在StackOverflow上你永远不会以任何其他方式教授),你可以使用trigger_error()而不是死.它将引发传统的PHP错误,并将自动记录,具体取决于PHP设置.
$result = mysqli_query($link , $sql) or trigger_error($link->error."[ $sql]");
Run Code Online (Sandbox Code Playgroud)如果您要将其mysqli_query()用作抽象库的一部分,则必须抛出一个新的Exception,因为您需要一些堆栈跟踪(总是提供异常)以了解发生此错误的位置.
但是,您不能new Exception与OR操作员一起使用.所以,代码变得更长一些:
$result = mysqli_query($link , $sql);
if (!$result) {
throw new Exception(mysqli_error($link)."[ $sql]");
}
Run Code Online (Sandbox Code Playgroud)
这不是什么大问题,因为你只需要写一次.
更新.事实证明,mysqli能够自己抛出异常,这可以减轻我们手动编写处理代码的麻烦:
$result = mysqli_query($link, $sql);
Run Code Online (Sandbox Code Playgroud)
如果出现错误,此代码将抛出异常,因此无需额外代码即可随时通知您.但是,在前面的示例中,我们在错误消息中添加了一个SQL查询,这可能非常有价值 - 因此,人们也可以坚持上述方法.
一个重要的说明
将错误日志写入另一个表的预定函数?
这显然是一个坏主意.特别是如果您要将错误消息写入先前尝试失败的同一介质中.
错误必须记录在最强大的介质中 - 纯文本日志.因此,只需设置PHP以编写错误日志并定期检查它们.
or只是一个运营商(非常相似||).
该or die()语法工作,因为or短路,这意味着如果第一个说法是正确的,True or X永远是真实的,所以X不评价,你的脚本没有die.