У меня есть класс базы данных и функция конструктора:
<?php class Connection { private $PDO; function __construct() { $username = 'root'; $password = 'password'; $PDO = new PDO('mysql:dbname=PROOV;host=localhost', $username, $password); return $this->PDO; } } ?>
И другой класс, который расширяет его:
<?php //$query = 'SELECT part_description FROM SparePartRequests LIMIT 100'; include_once 'connection.php'; class Proov extends PDO { public function returnRows() { $sth = $this->prepare('SELECT part_description FROM SparePartRequests LIMIT 100'); $sth->execute(); $result = $sth->fetch(); return $result; } } $proov = new Proov(); // <- this is line nr 19... ?>
И это исключает исключение: Предупреждение: PDO :: __ construct () ожидает по крайней мере 1 параметр, 0 задан в /var/www/proov/proov1.php в строке 19
Как я могу исправить свою проблему? Спасибо за любую помощь!
Спасибо за любую помощь!
Но вы расширяете PDO
– не Connection
(и соединение поддерживает объект PDO
– оно также не распространяется). Вам нужно решить, какой из этих методов вы хотите использовать.
Возможно, это то, что вы хотите?
class Connection extends PDO { public function __construct() { $username = 'root'; $password = 'password'; parent::__construct('mysql:dbname=PROOV;host=localhost', $username, $password); } } class Proov extends Connection { //We extend Connection - not PDO public function returnRows() { $sth = $this->prepare('SELECT part_description FROM SparePartRequests LIMIT 100'); $sth->execute(); $result = $sth->fetch(); return $result; } }
Вывод вашего класса Proov
из PDO
, поэтому он также наследует свой конструктор, который, в свою очередь, требует не менее 1 параметра.
Это конструктор Proov
и PDO
имеют:
public PDO::__construct() ( string $dsn [, string $username [, string $password [, array $driver_options ]]] )
Возможно, вы хотите получить решение h2o, но я бы не рекомендовал его. Задайте себе вопрос: «Проов» – «Связь»? Нет, вероятно, нет, поэтому я предлагаю использовать Injection Dependency:
class Proov { private PDO $pdo; public function __constructor($pdo) { $this->pdo = $pdo; } public function returnRows() { $sth = $this->pdo->prepare('SELECT part_description FROM SparePartRequests LIMIT 100'); } }
Это упрощает жизнь, особенно когда дело доходит до модульного тестирования.