ホームページ  >  記事  >  バックエンド開発  >  PHP で「非オブジェクトのメンバー関数 prepare() の呼び出し」エラーが発生するのはなぜですか?

PHP で「非オブジェクトのメンバー関数 prepare() の呼び出し」エラーが発生するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-25 20:07:12508ブラウズ

Why am I getting a

PHP での非オブジェクト エラーでのメンバー関数 Prepare() の呼び出し

PHP では、「非オブジェクトでのメンバー関数 prepare() の呼び出し」 -object」エラーは、オブジェクトではない変数に対して prepare() メソッドを呼び出そうとすると発生します。これは通常、変数が mysqli クラスのインスタンスを参照していない場合、または mysqli オブジェクトが適切に初期化されていない場合に発生します。

問題の理解

提供されたコードでは、selectInfo() 関数を呼び出したときに、$DBH 変数は mysqli クラスのオブジェクトとして初期化されません。これがエラーが発生する理由です。この問題を解決するには、次のいずれかの方法を使用できます。

方法 1: グローバル スコープを使用する

global $DBH;
function selectInfo($limit, $offset) {
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
}

この方法では、$DBH をグローバル変数として宣言します。これにより、selectInfo() 関数内でアクセスできるようになります。ただし、グローバル変数の汚染につながる可能性があるため、ベスト プラクティスとは見なされません。

アプローチ 2: オブジェクトをパラメータとして渡す

function selectInfo($DBH, $limit, $offset) {
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
}
selectInfo($DBH, 10, 20);

このアプローチは、オブジェクトを直接渡します。 mysqli オブジェクトを selectInfo() 関数のパラメータとして使用します。これはより明示的であり、オブジェクトが適切に初期化されることを保証します。

アプローチ 3: データベース ヘルパー関数を使用する

function getDBH() {
    static $DBH = null;
    if (is_null($DBH)) {
        $DBH = new mysqli("host", "test", "123456", "dbname");
    }
    return $DBH;
}

function selectInfo($limit, $offset) {
    $DBH = getDBH();
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
}

このアプローチでは、ヘルパー関数を使用して取得します。 mysqli オブジェクトを取得し、必要に応じて初期化します。これにより、selectInfo() を呼び出すときにオブジェクトが常に使用可能になります。

アプローチ 4: データベース クラスを使用する

class Database {
    private $DBH;

    public function __construct($host, $user, $pass, $dbname) {
        $this->DBH = new mysqli($host, $user, $pass, $dbname);
    }

    public function prepare($sql) {
        return $this->DBH->prepare($sql);
    }
}

$db = new Database("host", "test", "123456", "dbname");
$stmt = $db->prepare("SELECT * FROM information LIMIT ?,?");

このアプローチでは、データベース接続が 1 つのオブジェクト内にカプセル化されます。クラス。これは、ステートメントにアクセスして準備するためのクリーンで構造化された方法を提供します。

以上がPHP で「非オブジェクトのメンバー関数 prepare() の呼び出し」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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