Php 未捕获错误:即使已初始化数据库对象,仍对null调用成员函数prepare()
我得到一个错误,说prepare函数是空的,我以前有过这个问题,可以解决它没有问题,但我不明白我现在做错了什么。致命错误显示为: 致命错误:未捕获错误:调用上的成员函数prepare() C:\xampp\htdocs\OOP\Artist System\classes\Db.php:43堆栈中为空 跟踪:#0 C:\xampp\htdocs\OOP\Artist System\classes\Artist.php(94): Db->query('选择名称,pl..,数组)#1 C:\xampp\htdocs\OOP\Artist System\index.php(11):Artist->select()#2 {main}在上的C:\xampp\htdocs\OOP\Artist System\classes\Db.php中抛出 第43行 Db类:Php 未捕获错误:即使已初始化数据库对象,仍对null调用成员函数prepare(),php,Php,我得到一个错误,说prepare函数是空的,我以前有过这个问题,可以解决它没有问题,但我不明白我现在做错了什么。致命错误显示为: 致命错误:未捕获错误:调用上的成员函数prepare() C:\xampp\htdocs\OOP\Artist System\classes\Db.php:43堆栈中为空 跟踪:#0 C:\xampp\htdocs\OOP\Artist System\classes\Artist.php(94): Db->query('选择名称,pl..,数组)#1 C:\xampp
class Db
{
private $servername;
private $username;
private $password;
private $dbname;
private $charset;
public function __construct($servername, $username, $password, $dbname, $charset)
{
$this->servername = $servername;
$this->username = $username;
$this->password = $password;
$this->dbname = $dbname;
$this->charset = $charset;
}
private function connect()
{
try {
$dsn = "mysql:host=".$this->servername.";dbname=".$this->dbname.";charset=".$this->charset;
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $this->username, $this->password, $options);
return $pdo;
} catch (PDOException $e) {
$e->getMessage();
}
}
public function query($query, $data)
{
$stmt = $this->connect()->prepare($query);
$stmt->execute($data);
$queryWords = explode(' ', trim($query));
if ($queryWords[0] == "SELECT") {
return $stmt->fetchAll();
}
}
错误位于第93-94行的艺术家类:
public function select()
{
$select = "SELECT name, playcount, listeners, image FROM artist";
return $this->db->query($select, array());
}
检查数据库是否已连接或不尝试回显消息
echo$e->getMessage()代码>在查看帖子时看到了修复,谢谢。