ホームページ  >  記事  >  バックエンド開発  >  PHP コードで「非オブジェクトのメンバー関数 prepare() の呼び出し」エラーがスローされるのはなぜですか?それを修正するにはどうすればよいですか?

PHP コードで「非オブジェクトのメンバー関数 prepare() の呼び出し」エラーがスローされるのはなぜですか?それを修正するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-24 05:45:11718ブラウズ

Why does my PHP code throw a

非オブジェクトのメンバー関数 prepare() の呼び出し

PHP コードにより、prepare() メソッドにアクセスしようとしていることを示すエラー メッセージが表示されます存在しないオブジェクトの。このエラーの原因を特定するために、提供されたコードを詳しく調べてみましょう:

$DBH = new mysqli("host", "test", "123456", "dbname");

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

selectInfo();

エラーは、$DBH 変数のスコープから発生しています。 selectInfo() 関数内で、スコープを指定せずに $DBH にアクセスしようとしています。 $DBH は関数内で定義されていないため、直接アクセスできません。

この問題を解決するには、いくつかのオプションがあります。

1.グローバル キーワードを使用します:

function selectInfo($limit, $offset) {
    global $DBH;

    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
    $stmt->bind_param("ii", $limit, $offset);
    $stmt->execute();
}

2. $DBH を関数パラメータとして渡します:

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

3. $DBH を取得する関数の作成:

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 ?,?");
    $stmt->bind_param("ii", $limit, $offset);
    $stmt->execute();
}

これらのオプションのいずれかを実装すると、selectInfo() 関数内で $DBH の正しいスコープが確立され、必要なデータベースにアクセスできるようになります。接続します。

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

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