我使用 error_reporting(0) 代码来隐藏 PHP 错误,它总是有效,但是 mysql 有一些错误是无用的,是否有任何代码让 mysql 隐藏 mysql 错误,如无效 sql ,1064 错误
问问题
3690 次
5 回答
2
这里有一个想法:不要。
立即重新打开 PHP 错误报告,并修复这些错误,而不是将它们隐藏在地毯下。
就个人而言,我喜欢使用error_reporting(E_ALL ^ E_NOTICE)
. 虽然它并不完美,但我忽略了通知,因为默认行为是我无论如何都想要发生的。
忽略 MySQL 错误是一个很大的错误!...好吧,除非您想要一台死机和一百万客户对您生气。
于 2012-07-25T23:26:41.337 回答
1
$result = @mysql_operation();
$errno = mysql_errno();
if ($errno > 0)
{
handle_error();
}
于 2012-07-26T00:19:28.460 回答
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');
?>
于 2012-07-25T23:58:51.453 回答
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();
}
于 2012-07-26T00:17:43.907 回答
0
函数调用的@
前面应该抑制生成的任何错误。
它是错误控制运算符。我会非常轻松地使用它,并尝试首先修复产生错误/警告的代码。
我唯一会使用的@
是当我使用已弃用代码的第三方库时。当它们弹出时,过多地使用它会掩盖任何真正的问题(比如你可能遇到的问题),并且会使调试变得非常困难。
于 2012-07-25T23:29:31.753 回答