ホームページ > バックエンド開発 > PHPチュートリアル > PHP の複数のクラス間で PDO 接続を適切に使用するにはどうすればよいですか?

PHP の複数のクラス間で PDO 接続を適切に使用するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-21 00:50:08
オリジナル
1015 人が閲覧しました

How to Properly Use a PDO Connection Across Multiple Classes in PHP?

他のクラスで PDO 接続を使用する方法

不可解なエラーを理解する

「キャッチされないエラー: 未定義のメソッド データベースの呼び出し」というエラー メッセージ::prepare()」は、別のクラスで PDO 接続を使用しようとすると発生することがあります。このエラーは、オブジェクト指向プログラミング (OOP) がオブジェクトを相互接続する方法についての誤解が原因です。

問題の解決

1.データベース クラスを再考してください:
既存のデータベース クラスには意味のある目的はありません。代わりに、PDO の機能を拡張するラッパー クラスの作成に重点を置きます。

2.中央データベース接続を確立します:
PDO または拡張データベース クラスを使用して、スタンドアロン $db オブジェクトをインスタンス化します。この単一の接続は、今後のすべてのデータベース アクティビティの基礎として機能します。

3.接続をコンストラクター パラメーターとして渡します:
データベース アクセスを必要とするすべてのクラスは、コンストラクター引数として $db 接続を受け取る必要があります。このアプローチにより、アプリケーション全体を通じてデータベースへのシームレスなアクセスが保証されます。

包括的な例

次の改善されたものを考えてみましょう。コードベース:

database.php:

$host = '127.0.0.1';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
    \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
    \PDO::ATTR_EMULATE_PREPARES   => false,
];
$pdo = new \PDO($dsn, $user, $pass, $opt);
ログイン後にコピー

u ser.php:

class User {
    /* Properties */
    private $conn;

    /* Get database access */
    public function __construct(\PDO $pdo) {
        $this->conn = $pdo;
    }

    /* List all users */
    public function getUsers() {
        return $this->conn->query("SELECT username, usermail FROM user")->fetchAll();
    }
}
ログイン後にコピー

app.php:

include 'database.php';
$user = new User($pdo);
$list = $user->getUsers();

foreach($list as $test) {
    echo $test["username"],"\n";
}
ログイン後にコピー

これ洗練されたコードベースは、複数のクラスでの PDO 接続の正しい使用法を例示し、エラーのない操作と洗練されたコーディングの実践を保証します。

以上がPHP の複数のクラス間で PDO 接続を適切に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート