PDO __constructs ожидает как минимум 1 параметр, 0

У меня есть класс базы данных и функция конструктора:

<?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

Как я могу исправить свою проблему? Спасибо за любую помощь!

Спасибо за любую помощь!

Related of "PDO __constructs ожидает как минимум 1 параметр, 0"

Но вы расширяете 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'); } } 

Это упрощает жизнь, особенно когда дело доходит до модульного тестирования.