【问题标题】:Mysqli php i want a custom error message when unknown server hostMysqli php当未知服务器主机时我想要一个自定义错误消息
【发布时间】:2012-11-04 16:35:23
【问题描述】:

我正在编写一个脚本来在 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;    

【问题讨论】:

  • 不要那样做。 @ 隐藏错误,这很糟糕。它也没有回答问题。

标签: php error-handling mysqli warnings config


【解决方案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);

【讨论】:

  • 不错,但是端口 80?不是每个 mysql 服务器都运行 http
  • 我想他只写 80 因为我不向用户询问端口。如果我这样做,用户可以自己决定:) thx!
【解决方案2】:

已编辑:

你可以使用

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 {}

【讨论】:

  • 连接失败时mysqli会抛出异常吗?
  • +1 呃,不。难怪推动人们使用 PDO。,我会修改答案(感谢提醒)
  • 是的,但问题是我返回 false 并且在我的其他代码中我检查它是否返回 false 即时执行错误消息。所以我收到错误消息,但也收到警告..
猜你喜欢
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多