我使用error_reporting(0)代码来隐藏PHP错误,这总是有效的,但mysql中有一些错误是无用的,mysql有没有代码来隐藏mysql错误,比如无效的sql,1064个错误
这里有一个想法:不要。
现在重新打开PHP错误报告,并修复这些错误,而不是将其掩盖起来。
就我个人而言,我喜欢使用error_reporting(E_ALL ^ E_NOTICE)
。虽然它并不完美,但我忽略了通知,因为默认行为是我无论如何都想发生的。
忽略MySQL错误是一个很大的错误HELLNO。。。好吧,除非你想要一个死服务器和一百万客户对你生气。
$result = @mysql_operation();
$errno = mysql_errno();
if ($errno > 0)
{
handle_error();
}
函数调用前面的@
应抑制生成的任何错误。
它是错误控制操作员。我会非常轻松地使用它,并尝试首先修复产生错误/警告的代码。
我唯一一次使用@
是在使用已弃用代码的第三方库时。过多地使用它会掩盖任何真正的问题(比如你可能遇到的问题),当它们突然出现时,会使调试变得非常困难。
警告
来自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();
}