如果我使用了一下这样的代码:
$update_result = mysqli_query( $link , $sql_update_login ) or die ('Unable to execute query. '. mysqli_error($link));
是否有死,或者你可以把不同的查询之后? 就像一个预设功能写入日志错误的另一张表? 如:
$update_result = mysqli_query( $link , $sql_update_login ) or function('$query, $error);
什么是后“或”其他的选择吗? 我还没有找到它的文档中,任何蛛丝马迹都赞赏。
是否有死
完全相反, 它不应该die()
永远。
PHP是坏的遗传语言。 极坏的遗传。 和or die()
与错误消息是最差雏形之一:
- 模具引发错误消息时,揭示了一些系统内部到一个潜在的攻击者
- 这是混淆了无辜的用户用奇怪的消息,并让他们有接口工作,所以他们会很可能只是辍学。
- 它杀死在中间的脚本,所以它可能会导致撕裂设计(或毫无设计可言)所示(即一个不完整的呈现用户所请求的页面)
- 无可挽回查杀脚本。 虽然抛出的异常可以被捕获并正常处理
-
die()
给你任何地方发生错误的地方提示。 而在一个比较大的应用程序将是一个相当痛苦找到。
所以,从来不使用die()
与MySQL的错误, 即使是临时调试 :还有更好的方法。
为了您的查询,你有,但2个选择:
如果你打算使用mysqli_query()
所有的方式在应用程序代码(这是错误的,但在计算器上,你将永远不会教任何其他方式),则可以使用trigger_error()
而不是死。 这将提高传统的PHP错误,将被自动记录下来,这取决于PHP设置。
$result = mysqli_query($link , $sql) or trigger_error($link->error."[ $sql]");
如果你打算使用mysqli_query()
为抽象库的一部分,你必须抛出一个新的异常,而不是,因为你需要一些堆栈跟踪(它总是与例外提供)有发生这种错误的想法。
但是,您不能使用new Exception
与OR
操作。 所以,代码变得更长一点:
$result = mysqli_query($link , $sql);
if (!$result) {
throw new Exception(mysqli_error($link)."[ $sql]");
}
这是不是因为你必须把它写一次一个大问题。
更新。 事实证明, mysqli的是能够通过自身抛出异常 ,这可以从手动编写处理代码缓解我们:
$result = mysqli_query($link, $sql);
此代码将在错误的情况下抛出异常,因此你永远不需要额外的代码通知。 然而,在前面的例子中,我们已经添加到错误信息,这可以说是相当有价值的SQL查询 - 所以,人们可以坚持上述方法为好。
一个重要的提示
预定的功能写入一个日志中的错误的另一张表?
这显然是一个坏主意 。 特别是如果你想要写一个错误信息,其失败的一次尝试相同的介质。
错误必须登录到最强大的媒介 - 一个纯文本的日志。 所以,只要设置你的PHP写错误日志,并定期检查。
or
仅仅是一个运营商(非常类似于||
)。
该or die()
语法的作品,因为or
短路,这意味着如果第一个说法是正确的, True or X
将永远是真实的,所以X
不评估,你的脚本不会die
。
是的,你可以以后(或)提供不同的功能。 我已经测试了以下:
mysqli_query($sel_db,'what!') or some_func(mysqli_error($sel_db));
function some_func($str) {
die("ERROR: ".$str);
}
它不必是die()
明确,但它需要的东西,会通过调用使脚本暂停exit()
或die()
或东西,抛出异常。 否则,脚本将继续与该函数的返回值(这可能是null或某种垃圾)在$update_result
,这几乎肯定会导致问题。