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

Barbara Streisand
リリース: 2024-11-24 05:45:11
オリジナル
716 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート