数据库对象未创建,如何正确创建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
相关产品推荐
相关产品推荐

