「キャッチされないエラー: 未定義のメソッド データベースの呼び出し」というエラー メッセージ::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 サイトの他の関連記事を参照してください。