ホームページ >バックエンド開発 >PHPチュートリアル >PHP の別のクラスから MySQLi 接続にアクセスすると「500 内部サーバー エラー」が発生するのはなぜですか?

PHP の別のクラスから MySQLi 接続にアクセスすると「500 内部サーバー エラー」が発生するのはなぜですか?

DDD
DDDオリジナル
2024-10-26 05:48:02473ブラウズ

Why Am I Getting a

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。