首頁 > 後端開發 > php教程 > 為什麼在 PHP 中會出現「呼叫非物件上的成員函數prepare()」的情況,如何修復它?

為什麼在 PHP 中會出現「呼叫非物件上的成員函數prepare()」的情況,如何修復它?

Mary-Kate Olsen
發布: 2024-11-25 02:27:10
原創
473 人瀏覽過

Why Does

在非對像上調用成員函數prepare():PHP 幫助

問題:

嘗試呼叫物件上的方法時,會出現錯誤「呼叫非物件上的成員函數prepare()」不存在的物件。

原因:

提供的程式碼片段將$DBH 變數初始化為新的MySQLi 連接對象,但無法將其作為參數傳遞或在selectInfo() 函數中將其宣告為全域變數。因此,該函數無法存取該物件並引發錯誤。

解決方案:

要解決此問題,請考慮以下選項:

  1. 使用全域關鍵字:

    • function selectInfo($limit, $offset){
        global $DBH;
        $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
      登入後複製
  2. 將連接作為參數:

    • function selectInfo(MySQLi $DBH, $limit, $offset){
        $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
      登入後複製
  3. 建立取得資料庫的函數連接:

    • function getDBH(){
        static $DBH = null;
        if (is_null($DBH)) {
            $DBH = new mysqli(...);
        }
        return $DBH;
      }
      登入後複製

    $DBH = getDBH();
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
    登入後複製

    • function selectInfo($limit, $offset){
      class Database {
        private $conn;
      
        public function __construct(){
            $this->conn = new mysqli(...);
        }
      
        public function selectInfo($limit, $offset){
            $stmt = $this->conn->prepare("SELECT * FROM information LIMIT ?,?");
        }
      登入後複製
    }
  4. 建立資料庫包裝器類別:

考慮使用處理資料庫存取的程式庫或框架,例如如 Doctrine ORM、ADODB 或像 Zend 這樣的成熟框架。

以上是為什麼在 PHP 中會出現「呼叫非物件上的成員函數prepare()」的情況,如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板