您的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 程式碼會拋出「在非物件上呼叫成員函數準備()」錯誤,如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!