当它给出错误时,我希望他做两件事。
- 回声 nl2br($qVraagOp);
- mysql_error();
所以我认为:
$rVraagOp = mysql_query( $qVraagOp ) or die( echo nl2br($qVraagOp); mysql_error(); );
我可以编写一个函数来完成这两件事,然后调用它,但这有点多余。还有其他方法吗?
马蒂
至少对您的最终用户而言,仅仅因技术错误消息而死并没有真正的用处;你应该在设计你的网站时考虑到它们。
可能对任何人都更有用的解决方案是:
不过,如果你真的需要这个,你可以:
一个不错的解决方案可能是使用异常(半伪代码):
当然,这是考虑到您已经定义了MySQLException
某个地方。
try {
// Do some stuff
if (!mysql_query(...)) {
throw new MySQLException(mysql_error());
}
// Some other stuff
} catch (MySQLException $e) {
// Deal with the MySQLException kind of Exception
// i.e. deal my SQL errors
// => Log to file
// + display a nice error page
} catch (Exception $e) {
// At least, if something in the try block
// might raise an Exception that's not a MySQLException
}
Exception 的一个好处是你所有处理错误的代码都在一个地方:die
你的代码中间没有任何地方
我会写一个像这样的函数:
function PrintDebug($DebugData)
{
if($DebugMode == 1)
{
return nl2br($DebugData) . "<br />" . mysql_error();
}
else
{
return "Ops stuff got messed up!!!";
}
}
我会像这样使用它
$rVraagOp = mysql_query( $qVraagOp ) or die(PrintDebug($qVraagOp));
将调试状态保存在数据库中是您的工作(认为维护模式是否处于活动状态)并且记录到文件也会很有帮助。另外我想指出我没有测试它。
所以你想同时显示nl2br($qVraagOp)
和mysql_error()
?那将是
or die(nl2br($qVraagop) . PHP_EOL . mysql_error())
(使用常量在和PHP_EOL
之间放置换行符)nl2br($qVraagOp)
mysql_error()
我不应该在 PHP 上尝试这个,但它应该可以工作。对不起,如果没有:)
$rVraagOp = mysql_query( $qVraagOp ) or echo(nl2br($qVraagOp)) and die(mysql_error());
你可以写
$rVraagOp = mysql_query( $qVraagOp )
or die( sprintf("%s%s%s", nl2br($qVraagop), PHP_EOL, mysql_error()) );
die() 接收一个字符串(或一个 int)作为参数。
确保您的垂死消息仅存储在日志中,并且不会输出给最终用户,因为它通常是无用的,甚至是危险的(向潜在的攻击者透露有关您的配置的信息。)