我有数据库类和构造函数:
<?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()期望在第19行的/var/www/proov/proov1.php中给出至少1个参数0
我该如何解决我的问题? 谢谢你的帮助!
感谢您的帮助!
答案 0 :(得分:1)
但是您正在扩展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;
}
}
答案 1 :(得分:0)
您从Proov
派生了您的班级PDO
,因此它也会继承其构造函数,而构造函数又需要至少1个参数。
这是构造函数Proov
和PDO
都有:
public PDO::__construct() ( string $dsn [, string $username [, string $password [, array $driver_options ]]] )
也许你想提供解决方案h2o,但我不推荐它。问问自己这个问题:“Proov”是一个“连接”吗?不,它可能不是,因此我建议使用依赖注入:
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');
}
}
这使生活更简单,特别是在单元测试方面。