Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中隐藏mysql错误?_Php_Mysql - Fatal编程技术网

如何在PHP中隐藏mysql错误?

如何在PHP中隐藏mysql错误?,php,mysql,Php,Mysql,我使用error_reporting(0)代码来隐藏PHP错误,这总是有效的,但是mysql中有一些错误是无用的,mysql有没有代码来隐藏mysql错误,比如无效sql、1064个错误 立即重新打开PHP错误报告,并修复这些错误,而不是将它们掩盖起来 就个人而言,我喜欢使用错误报告(E\u ALL^E\u NOTICE)。虽然它并不完美,但我忽略了通知,因为默认行为是我无论如何都希望发生的 忽略MySQL错误是一个很大的问题。。。好吧,除非你想让一台死机的服务器和一百万客户对你发火。函数调用前

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

立即重新打开PHP错误报告,并修复这些错误,而不是将它们掩盖起来

就个人而言,我喜欢使用
错误报告(E\u ALL^E\u NOTICE)
。虽然它并不完美,但我忽略了通知,因为默认行为是我无论如何都希望发生的


忽略MySQL错误是一个很大的问题。。。好吧,除非你想让一台死机的服务器和一百万客户对你发火。

函数调用前面的
@
应该会抑制产生的任何错误

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


我唯一一次使用
@
是在使用包含不推荐代码的第三方库时。过多地使用它会在出现问题时掩盖任何真正的问题(比如你可能遇到的问题),并且会使调试变得非常困难。

警告

来自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');

?>

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

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

您不担心生成的SQL无效!?默认情况下,它不显示错误。。您可能正在手动打印它们;所以你什么也看不到。我不认为无效的sql是无用的。我在我的webiste中有album.php,在那个页面中我得到了一个无效的sql错误,但是,album.php?cat=2&gall=140&album=96 url没有错误。它显示了相关的数据。。如果有人打开album.php页面,就会显示一个无效的sql。如果他们通过cat id,则会显示相关数据。您忘记验证输入。
$result = @mysql_operation();
$errno = mysql_errno();
if ($errno > 0)
{
    handle_error();
}