首頁  >  文章  >  後端開發  >  為什麼我的 PHP 程式碼會拋出「在非物件上呼叫成員函數準備()」錯誤,如何修復它?

為什麼我的 PHP 程式碼會拋出「在非物件上呼叫成員函數準備()」錯誤,如何修復它?

Barbara Streisand
Barbara Streisand原創
2024-11-24 05:45:11739瀏覽

Why does my PHP code throw a

在非物件上呼叫成員函數prepare()

您的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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn