0

我正在编写一个脚本来在 php 中安装应用程序的数据库。它工作正常,但是当我尝试安装一个不存在的数据库时,我只想要我自己的错误消息,但我一直收到默认警告:警告:mysqli::mysqli() [mysqli.mysqli]: (HY000/2005): Unknown MySQL 服务器主机“kasdasd”。

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

我的带有参数 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;    
4

2 回答 2

1

一个简单的解决方案是查看是否可以使用 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);
于 2012-11-04T17:14:45.407 回答
0

编辑:

您可以使用

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 不会抛出错误,所以下面是不正确的。

将您的代码包装在 try-catch 中,然后您可以抛出您喜欢的任何类型的错误:

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坏主机抛出的特定类型的异常替换catch(MysqlBadHostnameException $e)(错误类型将在您之前尝试的错误日志中,或者您可以get_class($e)在上面的示例中执行。

// 使用自定义异常:将其添加到您的类之外..

class BadHostNameException extends Exception {}
于 2012-11-04T16:52:40.793 回答