gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:41:39 24 4
gpt4 key购买 nike

我正在尝试使用 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 会返回类似“未连接”的内容,而不是空字符串。这有点违反直觉,但至少有一定的记录。

关于php - 对 mysqli 构造函数使用默认值失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20445395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com