首頁 > 後端開發 > php教程 > 為什麼我的 mysqli::query() 失敗並出現'無法獲取 mysqli”資料庫連接錯誤?

為什麼我的 mysqli::query() 失敗並出現'無法獲取 mysqli”資料庫連接錯誤?

Susan Sarandon
發布: 2024-12-07 21:05:14
原創
795 人瀏覽過

Why is my mysqli::query() failing with a

Mysqli::query(): 資料庫連線錯誤

「mysqli::query(): 無法取得mysqli」錯誤通常表示資料庫連線有問題。以下步驟描述了該問題並根據提供的程式碼片段提供了解決方案:

  1. 連接:在連接檔案中,new mysqli() 中的@ 符號用於抑制錯誤報告。雖然這是為了防止錯誤顯示,但最好正確處理錯誤而不是忽略它們。
  2. 關閉:在類別建構子中,將 $DBConnect 指派給類別成員變數。這確保了連接物件在整個類別中可用。但是,在 __destruct() 方法中,如果沒有連線錯誤,則關閉連線。這是一個問題,因為由於連線不再可用,後續查詢將失敗。
  3. 重新開啟: __wakeup() 方法旨在在序列化後重新開啟連線。但是,實例化類別時不會呼叫它,這意味著連線保持關閉狀態。

解:

  1. 刪除@符號從連接物件實例化。以更穩健的方式處理錯誤。
  2. 將連接關閉程式碼移至單獨的方法,僅在需要關閉連接時呼叫它。
  3. 確保呼叫 __wakeup() 方法當類別被實例化時(例如,當從會話)。

修改後的程式碼:

// Connection file
$DBConnect = new mysqli("localhost", "root@localhost", NULL, "Ladle");

// Check for connection error
if ($DBConnect->connect_errno) {
    $ErrorMsgs[] = "The database server is not available. Connect Error is " . $DBConnect->connect_errno . " " . $DBConnect->connect_error . ".";
}

// Class
class EventCalendar {
    private $DBConnect = NULL;

    function __construct() {
        include("inc_LadleDB.php");
        $this->DBConnect = $DBConnect;
    }

    function __destruct() {
        // Close the connection only if it's not closed already
        if (!$this->DBConnect->connect_error) {
            $this->DBConnect->close();
        }
    }

    function __wakeup() {
        // Include the database connection data
        include("inc_LadleDB.php");
        $this->DBConnect = $DBConnect;
    }
    
    // Event adding method
    // ...
}
登入後複製

以上是為什麼我的 mysqli::query() 失敗並出現'無法獲取 mysqli”資料庫連接錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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