非オブジェクトでのメンバー関数 prepare() の呼び出し: PHP ヘルプ
問題:
オブジェクトを呼び出そうとすると、「非オブジェクトのメンバー関数 prepare() を呼び出します」というエラーが発生します。存在しないオブジェクトに対するメソッドです。
原因:
提供されたコード スニペットは $DBH 変数を新しい MySQLi 接続オブジェクトとして初期化しますが、それを渡すことができませんパラメータとして使用するか、selectInfo() 関数内でグローバル変数として宣言します。その結果、関数はオブジェクトにアクセスできず、エラーがスローされます。
解決策:
この問題を解決するには、次のオプションを検討してください:
グローバルを使用するキーワード:
function selectInfo($limit, $offset){ global $DBH; $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
として接続を渡しますパラメータ:
function selectInfo(MySQLi $DBH, $limit, $offset){ $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
データベースを取得する関数の作成接続:
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 ?,?");
}
データベースを作成するラッパー クラス:
class Database { private $conn; public function __construct(){ $this->conn = new mysqli(...); } public function selectInfo($limit, $offset){ $stmt = $this->conn->prepare("SELECT * FROM information LIMIT ?,?"); }
事前に構築されたライブラリまたはフレームワークを使用する:
以上がPHP で「非オブジェクトのメンバー関数 prepare() の呼び出し」が発生するのはなぜですか?どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。