如何在PHP中隐藏mysql错误?

时间:2012-07-25 23:23:06

标签: php mysql

我使用error_reporting(0)代码来隐藏PHP错误,这总是有效,但是mysql中有一些错误是没用的,有没有mysql的代码可以隐藏mysql错误,比如无效的sql,1064错误

5 个答案:

答案 0 :(得分:3)

这是一个想法:不要。

立即重新启用PHP错误报告,修复这些错误,而不是将它们扫地出门。

就个人而言,我喜欢使用error_reporting(E_ALL ^ E_NOTICE)。虽然它并不完美,但我忽略了通知,因为默认行为是我想要发生的事情。

忽略MySQL错误是一个很大的 HELL NO! ......好吧,除非你想要一台死机,一百万客户对你很生气。

答案 1 :(得分:1)

$result = @mysql_operation();
$errno = mysql_errno();
if ($errno > 0)
{
    handle_error();
}

答案 2 :(得分:0)

函数调用前面的@应该可以抑制生成的任何错误。

the error control operator。我会非常轻松地使用它,并尝试修复首先产生错误/警告的代码。

我使用@的唯一一次是当我使用已弃用代码的第三方库时。使用它太多会掩盖任何真正的问题(比如你可能会遇到的问题),当它们弹出时会使调试变得非常困难。

答案 3 :(得分:0)

警告

来自php.net

  • 目前,“@”错误控制运营商前缀甚至会禁用 错误报告将终止脚本的严重错误 执行。
  • 除此之外,这意味着如果您使用“@”来抑制错误 来自某个功能,或者它不可用或已经 错误的,脚本将死在那里,没有任何迹象表明 这是为什么。

来自php.net

更好的方法:

自定义您自己的想法。只有错误行或错误号码之间的错误

<?php

function exception_error_handler($errno, $errstr, $errfile, $errline )
{
    if (error_reporting() === 0)
    {
        return;
    }
    //example turn error OFF, between line 100 and 200
    if ($errline<100 || $errline>200) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    } else return;
}

set_error_handler("exception_error_handler");

function catchException($e)
{
    // Do some stuff
}

set_exception_handler('catchException');

?>

答案 4 :(得分:0)

我很惊讶我还没有看到异常被抛出。

Try / catch是一种非常有效的方法,可以自定义运行时错误和异常,并允许代码继续执行而不是暂停。

class MySQLConnectException extends Exception{
     public function __construct( $message ){
          parent::__construct( $message );
     }
}

try{
    $mysql = new mysqli();
    If( !$mysql )
        Throw new MySQLConnectException('Failed to connect');
}
catch( MySQLConnectException $e ){
    echo $e-> getMessage();
}