Php 新建mysqli-为什么会显示错误消息

Php 新建mysqli-为什么会显示错误消息,php,mysqli,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; }

我想检查是否可以访问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 />"
“致命错误:未捕获异常‘mysqli\u sql\u异常’,消息为‘用户访问被拒绝’”
@/is/htdocs/…mypath中的“localhost”(使用密码:否)
.php:33
堆栈跟踪:
#0/is/htdocs…mypath.myfile.php(33):mysqli mysqli(“”)
, '', '')
#1{main}
在第33行的/is/htdocs/wp1076647_373QG1K1B0/butobo/module/4/code/cms_checkcon.php中抛出

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

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;
}
这会将错误更改为警告,不会中断脚本。从这里开始,如果您想隐藏除致命错误以外的所有错误,可以使用以下PHP代码行:

error_reporting(E_ERROR);

将显示错误消息,因为您的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;
}

设置
错误报告时(E\u错误)
相当愚蠢,因为它会阻止您看到所有其他错误

您的用户变量为空。我使用您的代码“
警告:mysqli::mysqli():(HY000/1045):在/is/htdocs/…mypathandfile.php第40行的/is/htdocs/…mypathandfile.php中拒绝用户“@”localhost”(使用密码:NO)的访问
{“code”:false}”另外,如果我尝试使用ftp,我也会遇到同样的问题,在那里我们也会显示错误-可能是php的另一种预设置或其他什么?@newbieRB注意,这是一个警告,而不是一个致命的错误,正如最初的帖子所建议的:D在生产环境中,您可能应该通过运行以下PHP行将PHP错误日志级别设置为E_error:error_reporting(E_error);错误报告(E_错误);这就是我需要的简单想法:-)谢谢!这不仅与上面的答案基本相同,“设置错误报告(E\U错误);相当愚蠢”是一个愚蠢的说法。这使他看不到任何错误。他仍然可以很好地看到致命的错误。与这个答案不同,这个答案实际上会禁用所有错误输出。就像许多其他PHP用户一样,您将自己想象为站点的唯一用户。但问题是,有时它会上线,然后就不可能坐在每个用户的屏幕后面“观察”错误:)因此,令人惊讶的是,世界上任何成熟的网站都会阻止用户看到原始错误输出。我们中的一些人编写PHP的框架足够聪明,可以使用输出缓冲。我想我们不可能都像你想象的那样处于PHP开发人员的最高层,但也许你可以尝试让你的应用程序不输出错误,而不是让PHP这样做。因此,输出缓冲与任何好的PHP框架的HTML页面输出都有很大关系。如果您在路由器的开始处创建ob_start(),然后在路由器的结尾处创建$html=ob_get_clean(),则会留下一个字符串,该字符串表示PHP已回送的确切文本。这包括任何/所有错误/警告/通知输出。像您这样的开发人员可以很容易地解析字符串以删除任何他想要的内容,对吗?更不用说由应用程序而不是解释器处理错误的进一步抽象了。你的幻想虽然很有趣,但几乎不可信。就我而言,目前还没有任何框架可以让错误直接传播到站点设计中,然后缓冲,然后通过一些复杂的解析进行查找:)