You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据库对象未创建,如何正确创建Database类并修复报错?

PHP Database类报错:Undefined variable $db 修复方案

错误原因

代码中访问类私有属性$db时使用了错误语法$this->$db,这里的$db是未定义的普通变量,PHP会将其解析为变量变量,从而触发"Undefined variable $db"错误。正确访问类成员属性的语法是$this->db(属性名前不需要额外的$符号)。

修正后的完整代码

class Database {
    private $dbHost = 'localhost';
    private $dbUser = 'root';
    private $dbPass = 'usbw';
    private $dbName = 'track_serial';
    private $db;

    public function __construct() {
        // 修正属性访问语法,并添加PDO错误模式便于调试
        try {
            $this->db = new PDO(
                "mysql:host={$this->dbHost};dbname={$this->dbName};charset=utf8mb4",
                $this->dbUser,
                $this->dbPass,
                [
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
                ]
            );
        } catch(PDOException $e) {
            die("数据库连接失败: " . $e->getMessage());
        }
    }

    public function getData($sql) {
        // 修正属性访问语法
        $stmt = $this->db->prepare($sql);
        $stmt->execute();
        return $stmt->fetchAll();
    }
}

额外优化说明

  • 添加try-catch捕获PDO连接异常,直观显示连接失败原因;
  • 启用PDO::ERRMODE_EXCEPTION错误模式,后续数据库操作出错时会抛出异常,便于调试;
  • 设置PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,默认返回关联数组,使用更便捷;
  • 连接字符串中添加charset=utf8mb4,支持全字符集(包括emoji)。

内容的提问来源于stack exchange,提问作者Mahinda Jayathilaka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 10:28:14