mysqli连接到不存在的(默认?)主机


mysqli connects to non existing (default?) host

我遇到了一种奇怪的行为,我自己无法解释。也许有人可以帮忙。这两条单线:

$mysqli = new mysqli("");
print_r($mysqli);

给我这个:

mysqli Object (
    [affected_rows] => 0
    [client_info] => 5.5.44
    [client_version] => 50544
    [connect_errno] => 0
    [connect_error] => 
    [errno] => 0
    [error] => 
    [error_list] => Array
        (
        )
    [field_count] => 0
    [host_info] => Localhost via UNIX socket
    [info] => 
    [insert_id] => 0
    [server_info] => 5.5.47-0+deb7u1
    [server_version] => 50547
    [stat] => Uptime: 950  Threads: 2  Questions: 1340  Slow queries: 0  Opens: 397  Flush tables: 1  Open tables: 390  Queries per second avg: 1.410
    [sqlstate] => 00000
    [protocol_version] => 10
    [thread_id] => 393
    [warning_count] => 0
)

如您所见:[connect_errno] => 0这意味着存在有效的连接。我希望这里有一个连接错误。这不是有点安全风险吗?

正如您自己所说,mysqli能够打开与MySQL服务器的有效连接。这意味着您在MySQL服务器上设置了一个匿名用户。这是来自数据库管理方面的潜在安全风险。

就mysqli而言,它按设计运行。构造函数中的所有参数都是可选的。您只需要提供第一个,也可以是NULL或空字符串,在这种情况下,mysqli将回退到本地主机。如果构造函数中没有提供其他值,那么mysqli将从INI配置文件中读取值。如果INI文件没有设置任何值,那么mysqli将回退到默认设置,即localhost上的空用户和空密码。