php-使用mysqli构造函数的默认值失败

我正在尝试使用默认值mysqli constructor连接到数据库,该默认值记录为:

> host = ini_get(“ mysqli.default_host”)
>用户名= ini_get(“ mysqli.default_user”)
> passwd = ini_get(“ mysqli.default_pw”)

我想要使​​用默认值的原因是,这样我可以在配置文件中拥有凭据,而不是分散在我的代码中.但是,当我不传递任何值时,连接成功,但是随后的查询失败,没有错误.

$db = new mysqli();
if ($db->connect_errno) die("Connect failed: " . $db->connect_error);
if ($rs = $db->query("select user();") or die("Query failed: " . $db->error)) {
  $row = $rs->fetch_row();
  echo $row[0];
  $rs->close();
}

输出:

Query failed:

这意味着连接成功,但是任何查询都会失败并显示错误. (其他操作,例如select_db,以相同的方式失败.)

有趣的是,我可以将第一行更改为:

$db = new mysqli(ini_get("mysqli.default_host"),
                 ini_get("mysqli.default_user"),
                 ini_get("mysqli.default_pw"));

…但是我希望不必在需要数据库连接的地方都键入默认值.我究竟做错了什么?有没有办法使用不带参数的mysqli构造函数?

解决方法:

在写这个问题时,我碰巧向下滚动文档页面并注意到以下内容:

Note: Calling the constructor with no parameters is the same as calling mysqli_init().

查找mysqli_init documentation,它说:

Note: Any subsequent calls to any mysqli function (except mysqli_options()) will fail until mysqli_real_connect() was called.

因此,解决方法是将第一行从以下位置更改:

$db = new mysqli();

至:

$db = new mysqli();
$db->real_connect();

我希望在那种情况下mysqli_error会返回类似“未连接”的内容,而不是空字符串.这有点违反直觉,但至少有一些记录在案.

上一篇:Oracle 执行计划(Explain Plan)


下一篇:PHP mysql 扩展库 操作mysql数据库步骤