2

PDO を使い始めたばかりで、データベース接続を宣言する最善の方法を考えていました。

たとえば、config.php という名前のスクリプトを次のように作成することをお勧めします。

config.php

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
    PDO::ATTR_PERSISTENT => true
));
?>

次に、example.class.phpを用意します。

<?php
include config.php;
class Example {
    public function fetch() {
          $data = $dbh->query('SELECT * FROM myTable WHERE name = ' . $conn->quote($name));
          // do stuff
    }

}
?>

そして、これをすべてのクラスで行いますか?それとも、これは複数の接続を作成しますか? 接続をできるだけ少なくしたい。

4

3 に答える 3

2

あなたは近くにいますが、あなたの関数はその範囲外でfetchあるため機能しません。$dbh

グローバル化することもできますが、より良い解決策は、インスタンス化時にハンドラーをクラスに渡すことです

class Example {
    /** @var \PDO */
    protected $pdo;

    public function __construct(\PDO $pdo) {
         $this->pdo = $pdo;
    }
}
$class = new Example($dbh);

これはベスト プラクティスです。このように、db ポインターのセットアップと命名のロジスティクスは無関係です。クラスはそれを受け取る方法を定義し、渡されたポインターのインスタンスを使用します。

于 2013-10-14T16:54:26.600 に答える
2

あなたの例は見栄えがよく、永続的な接続を1つだけ作成します。

ただし、グローバルであることに依存するのではなく$dbh__constructofExampleに渡して後で行う必要があります。$this->dbh$dbh

アクセスする必要があるすべてのクラスでそれを行う必要がないようにするには、DB と他のクラスinheritを処理するクラスを実装するか、Trait.

于 2013-10-14T16:50:47.657 に答える
0

クリーンで整理されたコードを維持するには、「DbManager」クラスを作成して PDO をインスタンス化し、クエリやその他のメソッドを作成するなどの方法があります。config.php を使用して、アプリケーション構成を保存できます。

于 2013-10-14T16:59:44.097 に答える