PDO __constructs期望至少有1个参数,给定0

时间:2013-11-11 11:09:40

标签: php pdo construct

我有数据库类和构造函数:

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

我该如何解决我的问题? 谢谢你的帮助!

感谢您的帮助!

2 个答案:

答案 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个参数。

这是构造函数ProovPDO都有:

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');
  }
}

这使生活更简单,特别是在单元测试方面。