new mysqli - 为什么会显示错误消息

时间:2017-03-16 08:22:40

标签: php mysqli

我想检查是否可以访问mysql。

我不会有错误消息,只有连接准备就绪时才为真/假。

我试着这样做:

$appDB = new mysqli($data[0]['MYSQL']['HOST'], $data[0]['MYSQL']['BENUTZER'], $data[0]['MYSQL']['PW'], $data[0]['MYSQL']['TABELLE']);
  if ($appDB->connect_error) 
  { $res['code']=FALSE; } 
  else 
  { 
    $appDB -> close();
    $res['code']=TRUE; 
  }

但是总会出现一条错误消息 - 如何阻止此消息显示?

"<b>Fatal error</b>:  Uncaught exception 'mysqli_sql_exception' with message 'Access denied for user ''
@'localhost' (using password: NO)' in /is/htdocs/...mypath
.php:33
Stack trace:
#0 /is/htdocs...mypath.myfile.php(33): mysqli-&gt;mysqli('', ''
, '', '')
#1 {main}
  thrown in <b>/is/htdocs/wp1076647_373QG1K1B0/butobo/module/4/code/cms_checkcon.php</b> on line <b>33
</b><br />"

2 个答案:

答案 0 :(得分:0)

你需要通过try / catch语句“捕获”这个致命的异常。这允许您处理致命错误,然后由于它而不是您的脚本崩溃,您可以输出错误消息并退出:D

PHP例外:http://php.net/manual/en/language.exceptions.php

我希望这会有所帮助。

try
{
    $appDB = new mysqli($data[0]['MYSQL']['HOST'], $data[0]['MYSQL']['BENUTZER'], $data[0]['MYSQL']['PW'], $data[0]['MYSQL']['TABELLE']);
      if ($appDB->connect_error) 
      { $res['code']=FALSE; } 
      else 
      { 
        $appDB -> close();
        $res['code']=TRUE; 
      }
}
catch (Exception $e)
{
    echo 'Caught exception: ',  $e->getMessage(), "\n";
    exit;
}

这会将ERROR更改为WARNING,这不会破坏您的脚本。从那里,如果你想隐藏一切除了致命的错误,你可以使用这行PHP:

error_reporting(E_ERROR);

答案 1 :(得分:0)

将显示错误消息,因为您的PHP已配置为执行此操作。要使其不显示,只需将其配置为

即可
ini_set('display_errors', "0");

但是,此代码也会停止执行。为了防止它,你必须捕获异常。所以它应该像

try {
    $appDB = new mysqli($data[0]['MYSQL']['HOST'], $data[0]['MYSQL']['BENUTZER'], $data[0]['MYSQL']['PW'], $data[0]['MYSQL']['TABELLE']);
    $res['code']=TRUE; 
}
catch (Exception $e)
{
    error_log($e);
    $res['code']=FALSE;
}

虽然设置error_reporting(E_ERROR);是相当愚蠢的,因为它会阻止您看到所有其他错误