如何使用MySQLi防止/捕获连接错误

ref*_*med 5 php database mysqli try-catch connect

如果,例如,对于下面给定的代码,数据库名称无效,如何防止连接错误?

$mysql = new mysqli('localhost', 'user', 'pass', 'wrongdatabase');

if($mysql->connect_errno)
    die($mysql->connect_error);
Run Code Online (Sandbox Code Playgroud)

if语句将输出正确的错误消息,但仍然会从第一行发送警告,其中说明

Warning: mysqli::mysqli() [<a href='mysqli.mysqli'>mysqli.mysqli</a>]: (42000/1049): Unknown database 'wrongdatabase' in C:\wamp\www\example.php on line 14
Run Code Online (Sandbox Code Playgroud)

我知道使用PDO你只需将它包装在try/catch块中,但是如何用MySQLi做呢?

You*_*nse 6

我只是@-它.
这是手动错误抑制不是绝对邪恶的少数情况之一.

请注意,您将异常与错误混淆.虽然您也可以捕获它,但是如果您创建简单的自定义错误处理程序,它将从任何错误中抛出异常.
虽然我有一种感觉,你错误地采取了异常,作为一种错误抑制功能.无论如何,你永远不应该因为错误而死.至少做到这一点

@$mysql = new mysqli('localhost', 'user', 'pass', 'wrongdatabase');
if($mysql->connect_errno) trigger_error($mysql->connect_error,E_USER_ERROR);
Run Code Online (Sandbox Code Playgroud)

这是一个必须要做的错误控制.
在具有合理设置的实时服务器上,它将记录错误,而不是将其直接吐出到用户并发送适当的HTTP标头.虽然最好有一个自定义错误处理程序来处理这种错误更灵活的方式