2017-10-24 18:35
浏览 68

无法处理'getaddrinfo failed'

I have a PHP application which connects to a database.

The connection details (hostname,username,password,etc.) are supplied by the user. The problem is that when the user enters a non-exsisting hostname, I get the following warning:

Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed

How do I handle this error? I am already using try-catch and it handles other exceptions perfectly (wrong username or password), but not this one.

Here is my code:


// Library setup
require_once "instlib.php";
$lib = new installer;

// Header
header('Content-Type: application/json; Charset=UTF-8');

try {
        "host" => "a",
        "user" => "b",
        "pass" => "c",
        "database" => "",
        "port" => "3306"
    echo $lib->build_response("AWESOME!", true);
} catch (Exception $e) {
    echo $lib->build_response($e->getMessage(), false);


require_once 'library.php';
class installer extends nncms
    public function build_response($response = "", $success, $extra = array())
        return json_encode(array_merge(array('success' => $success, 'response' => $response),$extra));


class nncms
    var $mysqli;

    public function create_mysqli($config)
        // Set MySQLi to throw expection instead of warning

        // Connection setup
        $mysqli = new mysqli(

        // In case of an error that somehow didn't throw an exception
        if ($mysqli->connect_errno)
            throw new Exception("Connection error: ".$mysqli->connect_error);

        // Set MySQLi object of class
        $this->mysqli = $mysqli;
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dq804806 2017-10-24 18:53

    To change the behavior of PHP when there's a Warning, there's several options.

    First option, use the error suppressor operator @. You don't want to do this. It "works", but it will bring you problems down the road when you can't find the reason for a bug you're having.

    if ($db = @mysqli_connect("a", "a", "a", "a")) {
        // connected

    The better option is to use set_error_handler() to throw an ErrorException whenever you run into a Warning. This will let you handle errors gracefully as Exceptions:

    function errorHandler($errno, $errstr, $errfile, $errline) {
        throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    try {
        if ($db = mysqli_connect("a", "a", "a", "a")) {
            // connected
    catch(ErrorException $e) {
        echo "Exception: ".$e->getMessage();
    点赞 评论

相关推荐 更多相似问题