首页 > 后端开发 > php教程 > 为什么我的 mysqli::query() 失败并出现'无法获取 mysqli”数据库连接错误?

为什么我的 mysqli::query() 失败并出现'无法获取 mysqli”数据库连接错误?

Susan Sarandon
发布: 2024-12-07 21:05:14
原创
782 人浏览过

Why is my mysqli::query() failing with a

Mysqli::query(): 数据库连接错误

“mysqli::query(): 无法获取 mysqli”错误通常表明数据库连接有问题。以下步骤描述了该问题并根据提供的代码片段提供了解决方案:

  1. 连接:在连接文件中,new mysqli() 中的 @ 符号用于抑制错误报告。虽然这是为了防止错误显示,但最好正确处理错误而不是忽略它们。
  2. 关闭:在类构造函数中,将 $DBConnect 分配给类成员变量。这确保了连接对象在整个类中可用。但是,在 __destruct() 方法中,如果没有连接错误,则关闭连接。这是一个问题,因为由于连接不再可用,后续查询将失败。
  3. 重新打开: __wakeup() 方法旨在在序列化后重新打开连接。但是,实例化类时不会调用它,这意味着连接保持关闭状态。

解决方案:

  1. 删除@符号从连接对象实例化。以更稳健的方式处理错误。
  2. 将连接关闭代码移至单独的方法,仅在需要关闭连接时调用它。
  3. 确保调用 __wakeup() 方法当类被实例化时(例如,当从会话)。

修改后的代码:

// Connection file
$DBConnect = new mysqli("localhost", "root@localhost", NULL, "Ladle");

// Check for connection error
if ($DBConnect->connect_errno) {
    $ErrorMsgs[] = "The database server is not available. Connect Error is " . $DBConnect->connect_errno . " " . $DBConnect->connect_error . ".";
}

// Class
class EventCalendar {
    private $DBConnect = NULL;

    function __construct() {
        include("inc_LadleDB.php");
        $this->DBConnect = $DBConnect;
    }

    function __destruct() {
        // Close the connection only if it's not closed already
        if (!$this->DBConnect->connect_error) {
            $this->DBConnect->close();
        }
    }

    function __wakeup() {
        // Include the database connection data
        include("inc_LadleDB.php");
        $this->DBConnect = $DBConnect;
    }
    
    // Event adding method
    // ...
}
登录后复制

以上是为什么我的 mysqli::query() 失败并出现'无法获取 mysqli”数据库连接错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板