在非對像上調用成員函數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; }
$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中文網其他相關文章!