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

时间:2016-04-07 09:48:25

标签: php mysqli

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

$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 这意味着有一个有效的连接。 我宁愿在这里遇到连接错误。这有点安全隐患吗?

1 个答案:

答案 0 :(得分:1)

正如您自己所说,mysqli 能够打开到您的 MySQL 服务器的有效连接。这意味着您有 an anonymous user set up on your MySQL server。这是数据库管理方面的潜在安全风险。

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