0

当它给出错误时,我希望他做两件事。

  1. 回声 nl2br($qVraagOp);
  2. mysql_error();

所以我认为:

$rVraagOp = mysql_query( $qVraagOp ) or die( echo nl2br($qVraagOp); mysql_error(); );

我可以编写一个函数来完成这两件事,然后调用它,但这有点多余。还有其他方法吗?

马蒂

4

5 回答 5

5

至少对您的最终用户而言,仅仅因技术错误消息而死并没有真正的用处;你应该在设计你的网站时考虑到它们。

可能对任何人都更有用的解决方案是:

  • 将技术错误消息记录到文件中,您有时会检查该文件
  • 向最终用户显示一个漂亮的“哎呀,发生了错误”页面。


不过,如果你真的需要这个,你可以:

  • 连接两个信息,只有一个字符串
  • 使用 if/else 块;这可能会使您的代码更易于阅读。


一个不错的解决方案可能是使用异常(半伪代码)
当然,这是考虑到您已经定义了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你的代码中间没有任何地方

于 2010-02-22T20:22:25.697 回答
1

我会写一个像这样的函数:

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));

将调试状态保存在数据库中是您的工作(认为维护模式是否处于活动状态)并且记录到文件也会很有帮助。另外我想指出我没有测试它。

于 2010-02-22T20:26:49.510 回答
0

所以你想同时显示nl2br($qVraagOp)mysql_error()?那将是

or die(nl2br($qVraagop) . PHP_EOL . mysql_error())

(使用常量在和PHP_EOL之间放置换行符)nl2br($qVraagOp)mysql_error()

于 2010-02-22T20:19:54.470 回答
0

我不应该在 PHP 上尝试这个,但它应该可以工作。对不起,如果没有:)

$rVraagOp = mysql_query( $qVraagOp ) or echo(nl2br($qVraagOp)) and die(mysql_error());
于 2010-02-22T20:21:18.863 回答
0

你可以写

$rVraagOp = mysql_query( $qVraagOp ) 
          or die( sprintf("%s%s%s", nl2br($qVraagop), PHP_EOL, mysql_error()) );

die() 接收一个字符串(或一个 int)作为参数。

确保您的垂死消息仅存储在日志中,并且不会输出给最终用户,因为它通常是无用的,甚至是危险的(向潜在的攻击者透露有关您的配置的信息。)

于 2010-02-22T20:22:28.527 回答