mysqli php我需要一个自定义错误消息,当时未知服务器主机



我正在编写一个脚本以在PHP中安装应用程序的数据库。它运行良好,但是当我尝试安装不存在的数据库时,我只需要自己的错误消息,但是我一直在获取默认警告:警告:mysqli :: mysqli()[mysqli.mysqli]:(hy000/2005):未知MySQL Server主机" kasdasd"。

所以我知道主机是错误的,我希望这样做,只有我自己的错误。我如何摆脱此消息?

我的ConnectClass带有参数dbconfig $ config:

    $this->mysqli = new mysqli($config->m_host,
                                $config->m_user,
                                $config->m_passw,
                                $config->m_db);
    if ($this->mysqli->connect_error) {
        return false;
    }
    $this->mysqli->set_charset("utf8");
    return true;    

一个简单的解决方案是查看您是否可以使用fsockopen打开主机名并抑制错误:

$port = 80;
if($fp = @fsockopen($config->m_host,$port)){
    $db = new mysqli($config->m_host,$config->m_user,$config->m_passw,$config->m_db);
}else{
    echo 'hostname not recognized';
}
@fclose($fp);

编辑:

您可以使用

if ($mysqli->connect_error) {
    /** handle your error here **/
    // Throw a custom exception if you like! (see below)
    // or just echo "There was an error";
}

您可以进一步使用mysqli_connect_errno()来找出发生的事情并相应处理。

编辑:mysqli不会投掷erros,因此下面是不正确的。

将您的代码包装在尝试键入中,然后您可以扔任何喜欢的错误:

try {
  /** your code here **/
} catch (Exception $e) {
  /** your handling here **/
  // i.e.
  throw new BadHostNameException($config->m_host);
  // or
  echo "Could not connect!":
}

注意:您应该用特定类型的异常替换 Exception $e bad主机投掷,因此catch(MysqlBadHostnameException $e)(错误类型将在您以前的尝试中的错误日志中,或者您可以在上面的示例中进行get_class($e)

//符合自定义异常:在您的课外添加。

class BadHostNameException extends Exception {}

最新更新