Я пытаюсь установить соединение с базой данных с 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 без необходимости определять его внутри вашего одноэлементного класса.