【发布时间】:2019-05-20 10:15:13
【问题描述】:
自从我将我的课程改为静态并尝试学习 OOP。我的 PDO 停止工作。
你们有什么线索吗?由于 PDO 连接在 DBconnect 中应该可以正常工作吗?
这是我的代码:
<?php
Class Db{
private static $dbHost;
private static $dbUser;
private static $dbPass;
private static $dbName;
private static $dbResult = null;
public static $dbConnect = null;
public static function connection(){
self::$dbHost = '***';
self::$dbUser = '***';
self::$dbPass = '***';
self::$dbName = '***';
try{
self::$dbConnect = new PDO('mysql:host='. self::$dbHost . ';dbname=' . self::$dbName,
self::$dbUser,
self::$dbPass);
}catch(PDOException $e){
echo 'Connection error: ' . $e->getMessage();
}
}
public static function query($sql, $array = []){
self::$dbResult = self::$dbConnect->prepare($sql);
self::$dbResult->execute($array);
}
public static function getOne(){
return self::$dbResult->fetch(PDO::FETCH_ASSOC);
}
public static function getAll(){
return self::$dbResult->fetchAll(PDO::FETCH_ASSOC);
}
public static function getCount(){
return self::$dbResult->rowCount();
}
}
未捕获的错误:在 null 上调用成员函数 prepare()
【问题讨论】:
-
很明显,当您调用
query时,它正在尝试使用self::$dbConnect,并且尚未初始化。什么时候调用Db::connection()初始化? -
@Martin 我将连接存储到变量 dbConnect 中。 self::$dbConnect = new PDO('mysql:host='.self::$dbHost .';dbname='.self::$dbName, self::$dbUser, self::$dbPass);
-
我知道。你什么时候执行初始化它的代码?你没看我的评论吗
-
@Martin 在我的其他课程中我使用这个: public function __construct(){ $this->connection = self::$dbConnect; }
-
如果您不执行
Db::connection(),则创建$dbConnect的代码永远不会运行。$dbConnect未创建。