0

PHPでアプリケーションのデータベースをインストールするスクリプトを書いています。正常に動作していますが、存在しないデータベースをインストールしようとすると、自分のエラーメッセージだけが必要ですが、デフォルトの警告が表示され続けます: 警告: mysqli::mysqli() [mysqli.mysqli]: (HY000/2005): 不明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 に答える