PHP で「非オブジェクトのメンバー関数 prepare() の呼び出し」が発生するのはなぜですか?どうすれば修正できますか?

Mary-Kate Olsen
リリース: 2024-11-25 02:27:10
オリジナル
414 人が閲覧しました

Why Does

非オブジェクトでのメンバー関数 prepare() の呼び出し: PHP ヘルプ

問題:

オブジェクトを呼び出そうとすると、「非オブジェクトのメンバー関数 prepare() を呼び出します」というエラーが発生します。存在しないオブジェクトに対するメソッドです。

原因:

提供されたコード スニペットは $DBH 変数を新しい MySQLi 接続オブジェクトとして初期化しますが、それを渡すことができませんパラメータとして使用するか、selectInfo() 関数内でグローバル変数として宣言します。その結果、関数はオブジェクトにアクセスできず、エラーがスローされます。

解決策:

この問題を解決するには、次のオプションを検討してください:

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

    • function selectInfo($limit, $offset){
        global $DBH;
        $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
      ログイン後にコピー
  2. として接続を渡しますパラメータ:

    • function selectInfo(MySQLi $DBH, $limit, $offset){
        $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
      ログイン後にコピー
  3. データベースを取得する関数の作成接続:

    • function getDBH(){
        static $DBH = null;
        if (is_null($DBH)) {
            $DBH = new mysqli(...);
        }
        return $DBH;
      }
      ログイン後にコピー

    function selectInfo($limit, $offset){

    $DBH = getDBH();
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
    ログイン後にコピー

    }

  4. データベースを作成するラッパー クラス:

    • class Database {
        private $conn;
      
        public function __construct(){
            $this->conn = new mysqli(...);
        }
      
        public function selectInfo($limit, $offset){
            $stmt = $this->conn->prepare("SELECT * FROM information LIMIT ?,?");
        }
      ログイン後にコピー
  5. 事前に構築されたライブラリまたはフレームワークを使用する:

    • データベースを処理するライブラリまたはフレームワークの使用を検討してくださいDoctrine ORM、ADODB、または Zend のような本格的なフレームワークなどにアクセスできます。

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

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