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 つのパラメーターを期待しています。

どうすれば問題を解決できますか? 助けてくれてありがとう!

助けてくれてありがとう!

4

2 に答える 2

1

しかし、あなたは拡張しています-そうではありませPDOConnection(接続は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;
    }
}
于 2013-11-11T11:11:40.097 に答える
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');
  }
}

これにより、特に単体テストに関しては、作業が簡単になります。

于 2013-11-11T11:12:04.280 に答える