11

我有 php 脚本,它应该尝试连接到本地站点中的数据库。如果本地数据库不可用,它应该尝试连接到远程服务器上的数据库。

$dblink = mysql_connect(DBHOST_LOCAL, DBUSER, DBPASS) or $RC = 1;
if($RC) {
    $dblink = mysql_connect(DBHOST_REMOTE, DBUSER, DBPASS) or die('Could not connect'.mysql_error());
}

问题是如果第一次连接失败,我不想在页面上显示警告消息。有没有办法只为 mysql_connect() 函数禁用警告消息?

4

5 回答 5

13

是的,像这样添加一个@符号来抑制警告/错误消息,然后自己做一次错误:

$dblink = @mysql_connect(DBHOST_LOCAL, DBUSER, DBPASS);

if (!$dblink) 
{
    $dblink = @mysql_connect(DBHOST_REMOTE, DBUSER, DBPASS);                  
}

if (!$dblink)
{
    $message = sprintf(
        "Could not connect to local or remote database: %s",
        mysql_error()
    );
    trigger_error($message);
    return;
}

请注意,您需要自己处理所有错误报告。如果你犯了错误,这样的代码很难调试。

于 2013-06-04T08:20:12.597 回答
4

您可以设置错误报告error_reporting(0);以关闭特定页面的错误和警告

只需根据您的需要设置

# config.ini 
# PHP error reporting. supported values are given below. 
# 0 - Turn off all error reporting 
# 1 - Running errors 
# 2 - Running errors + notices 
# 3 - All errors except notices and warnings 
# 4 - All errors except notices 
# 5 - All errors 

文档

像这样设置在页面的开头

<?php 

      error_reporting(E_ERROR | E_WARNING | E_PARSE);

?>

让我知道我是否可以为您提供更多帮助。

于 2013-06-04T08:29:18.217 回答
3

正确的解决方案是禁止向用户显示 PHP 错误、警告和通知。这可以通过display_errorsphp.ini 配置文件中的设置来完成:

display_errors = Off

它也可以在运行时通过以下方式设置ini_set()

ini_set('display_errors', '0');

手册

display_errors
这决定了错误是否应该作为输出的一部分打印到屏幕上,或者是否应该对用户隐藏。

这样做可以防止任何用户看到敏感的 PHP 错误消息,但仍允许将它们打印到日志文件中。

使用@抑制方法可以满足您的要求,但它仍然允许向用户打印任何其他 PHP 错误/警告,这是一个安全问题,因为这些错误可能包含不应公开的敏感信息。

于 2013-06-04T08:49:03.370 回答
0

你不能使用以下方法:

if (!$connection = mysql_connect(DBHOST_LOCAL, DBUSER, DBPASS)) {
    die('And here we connect to the other server');
} 

当连接失败时,它返回一个布尔值,这将导致 if 语句为真。

于 2013-06-04T08:25:04.803 回答
0

我将mysql查询放在try语法中以避免显示消息

try {
    some code of sql
} catch (Exception $e) {
    $errors[] = $e->getMessage();
}
于 2018-11-05T14:47:07.990 回答