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