PHP の別のクラスから MySQLi にアクセスする方法
別のクラスからデータベース接続を確立しようとするとエラーが発生しますMySQLiを使用したPHPで。接続オブジェクトにアクセスしようとすると、エラー「内部サーバー エラー 500」が発生し、コードまたは構成に問題があることを示します。
この問題を解決するには、コードを分析して重要なポイントを特定しましょう。
データベース クラス:
データベース クラスには、サーバー名、ユーザー名、パスワード、データベース名など、データベースに接続するために必要な情報が含まれています。
API クラス:
API クラス内で、new Database() を使用して $db プロパティを初期化します。これにより、データベース クラスの __construct メソッド内で作成された接続とは異なる、新しいデータベース接続オブジェクトが確立されます。
関数呼び出し:
次に、次のことを試みています。 $this->db->conn オブジェクトを使用してクエリを実行します。これは MyAPI クラス内で未定義です。これは、$conn プロパティが Database クラス内でのみ定義されているためです。
解決策:
MyAPI クラス内のデータベース接続オブジェクトにアクセスするには、以下を渡す必要があります。これは、Database の新しいインスタンスを作成するときにコンストラクターの引数として使用されます。
修正されたコードは次のとおりです:
Database.php:
<code class="php">class Database { private $conn; public function __construct() { $this->conn = new mysqli(...connection details...); } public function getConn() { return $this->conn; } }</code>
MyAPI.php:
<code class="php">class MyAPI { private $db; public function __construct($db) { $this->db = $db; } public function getUser($id) { $sql = ...query...; $result = mysqli_query($this->db->getConn(), $sql); return mysqli_fetch_assoc($result); } }</code>
app.php:
<code class="php">$db = new Database(); $api = new MyAPI($db); $user = $api->getUser($_POST['id']);</code>
このアプローチにより、データベース接続オブジェクトが MyAPI 内でアクセス可能になります。クラスを使用すると、クエリを実行してデータを正常に取得できるようになります。
以上がPHP の別のクラスから MySQLi 接続にアクセスすると「500 内部サーバー エラー」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。