Подключение к базе данных с PDO и классом Singleton

Я пытаюсь установить соединение с базой данных с PDO и классом Singleton, но у вас проблемы с получением данных из базы данных.

Я читал об этом, но я все еще не уверен, как назвать класс Singelton в моем файле базы данных из другого файла и получить результаты распечатки. Ошибка, которую я получаю прямо сейчас, – это фатальная ошибка. Позвоните в неопределенный запрос функции () в моем файле db.php. Последняя функция в моем файле базы данных. Однако я считаю, что функция определена?

Любая помощь ценится!

Вот файл подключения моей базы данных (db.php):

<?php class Database { private $_db; static $_instance; private function __construct() { $this->_db = new PDO('mysql:host=localhost;dbname=mvcuser', 'root', ''); $this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } private function __clone(){} public static function getInstance() { if (!(self::$_instance instanceof self)) { self::$_instance = new self(); } return self::$_instance; } public function query($sql) { return query($this->_db,$sql); } } 

И вот код в моем файле index.php:

 <?php require_once 'model/db.php'; $db = Database::getInstance(); $db->query('SELECT * FROM users'); if ($result = $db->query($query)) { while ($row = $result->fetch(PDO::FETCH_ASSOC)) { echo $row; } } 

Определение вашего метода Database::query не имеет смысла. Похоже, вы вызываете некоторый query функции PHP (которого не существует), и вы получаете ошибку.
Я думаю, вы можете изменить определение метода так:

 public function query($sql) { return $this->_db->query($sql); } 

Обновление: и в index.php

 $db = Database::getInstance(); $statement = 'SELECT * FROM users'; if ($result = $db->query($statement)) { while ($row = $result->fetch(PDO::FETCH_ASSOC)) { echo $row; } } 

Я знаю, что этот квест немного устарел, но для тех, кто нашел его у Google, если вы не хотите создавать метод обертки для каждого метода PDO, вы можете использовать его внутри своего одноэлементного класса.

 public function __call ( $method, $args ) { if ( is_callable(array($this->_db, $method)) ) { return call_user_func_array(array($this->_db, $method), $args); } else { throw new BadMethodCallException('Undefined method Database::' . $method); } } 

Теперь вы можете использовать $db->query($statement) или любой другой метод PDO без необходимости определять его внутри вашего одноэлементного класса.