#php
Вопрос:
Всем привет, я новый программист и программирую проект веб — сайта мероприятия. У меня есть некоторые проблемы с извлечением данных при вызове метода из дочернего класса. Кто-нибудь может мне помочь?
Database.php
class Database {
private $dns = "mysql:host=localhost; dbname=event_management; port=3306; charset=utf8mb4";
private $username = "root";
private $password = "";
private $pdo, $stmt;
public function __construct()
{
try {
$this->pdo = new PDO($this->dns,$this->username,$this->password);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
} catch (Exception $th) {
Message::showMess("Connection failed: ".$th->getMessage());
}
}
public function crudData($query,$param=[], $option=[]){
try {
$this->stmt = $this->pdo->prepare($query,$option);
$this->stmt->execute($param);
return $this->stmt;
} catch (Exception $th) {
Message::showMess("Error: ".$th->getMessage());
}
}
Query.php
include "Database.php";
class Query extends Database {
private static $selection;
private $query;
private $param = [];
public function __construct($query){
$this->query = $query;
}
public function execute(){
return $this->crudData($this->query, $this->param);
}
}
//Run code
$query = new Query("SELECT * FROM events");
print_r($query->execute());
/* Result ---------------------
`Fatal error: Uncaught Error: Call to a member function prepare() on null in
C:xampphtdocsFinalProjectdatabaseDatabase.php:22 Stack trace: #0
C:xampphtdocsFinalProjectdatabaseDatabase.php(188): Database->crudData('SELECT *
FROM e...', Array) #1 C:xampphtdocsFinalProjectdatabaseDatabase.php(194): Query-
>execute() #2 {main} thrown in`
*/
Комментарии:
1. Не могли бы вы, пожалуйста, попробовать создать экземпляр класса базы данных. Перед $query = новый запрос(«ВЫБРАТЬ * ИЗ событий»); поместите $database = новая база данных();
2. Я создал его экземпляр при выполнении функции (), и он не может отображаться
3. Я верю, что вы этого не сделали, потому что переопределили конструктор. Может быть, перед — $это->запрос = $запрос; поместите родителя::__построить();
4. @g9m29 О, я исправил это, основываясь на вашем ответе, спасибо за многое.
5. Не беспокойтесь, рад, что смог помочь 🙂