」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼升級到 PHP 8.1 後 mysqli_connect 失敗時不顯示我的自訂錯誤訊息?

為什麼升級到 PHP 8.1 後 mysqli_connect 失敗時不顯示我的自訂錯誤訊息?

發佈於2024-11-08
瀏覽:540

Why Are My Custom Error Messages Not Displaying in mysqli_connect Failures After Upgrading to PHP 8.1?

調查mysqli_connect 失敗中隱藏的自訂錯誤訊息

在嘗試建立資料庫連線時,您遇到了一個問題,即您定義的自訂錯誤訊息未被顯示連線失敗時顯示。您也在尋找一種從使用者的角度抑制錯誤訊息的方法。

錯誤訊息的本質

從PHP 8.1 開始,mysqli 擴展現在會在出現以下情況時自動拋出異常:錯誤,消除了像早期版本的PHP 中那樣進行手動錯誤處理的需要。

錯誤抑制背後的基本原則

自訂錯誤訊息(如您定義的錯誤訊息)不再建議用於錯誤處理。 PDO 和 mysqli 都能夠自動引發錯誤,就像其他 PHP 指令一樣。因此,像您嘗試對 if (!$conn) 段執行的那樣手動檢查錯誤已過時。

避免錯誤暴露給用戶

防止錯誤訊息到達用戶,您應該使用 display_errors 配置選項,可以將其設為 0 以抑制所有錯誤輸出。這可以在php.ini 檔案中配置,也可以直接在PHP 程式碼中配置:

ini_set('display_errors', 0);

提供使用者友善的錯誤頁面

建議向網站訪客提供使用者友善的錯誤頁面,而不是顯示神秘的錯誤訊息。這可以透過設定一個錯誤處理程序來實現,如下所示,它將捕獲所有不可恢復的錯誤:

set_exception_handler(function ($e)
{
    error_log($e);
    http_response_code(500);
    if (ini_get('display_errors')) {
        echo $e;
    } else {
        echo "<h1>500 Internal Server Error</h1>\nAn internal server error has been occurred.<br>\nPlease try again later.";
    }
});

單獨處理資料庫連接錯誤

如果您需要專門處理資料庫連接錯誤,您可以使用包裝在try-catch 區塊中的單獨連接測試腳本,與常規連接測試腳本分開連接代碼。

保護連線憑證

為了增強安全性,請將 PHP 版本更新到 8.2 或更高版本,這樣可以隱藏資料庫密碼,使其不會出現在堆疊追蹤中。

最新教學 更多>
  • 如何使用 jQuery 偵測鍵盤 Enter 按下:綜合指南
    如何使用 jQuery 偵測鍵盤 Enter 按下:綜合指南
    使用 jQuery 檢測鍵盤 Enter 按下:綜合指南檢測使用者輸入對於建立互動式 Web 應用程式至關重要。一項常見任務是捕捉 Enter 按鍵。本文探討如何使用 jQuery 無縫地實現這一點,並解決了瀏覽器相容性的問題。 jQuery 解決方案jQuery 提供了一個名為 keypress(...
    程式設計 發佈於2024-11-08
  • 字串與字串
    字串與字串
    細繩 小寫字串是JavaScript中的原始資料型別。 用這種類型建立的字串不是對象,但 JavaScript 會自動用 String 物件包裝它們(這稱為「裝箱」)。 let imAString = "hello"; console.log(typeof imAString)...
    程式設計 發佈於2024-11-08
  • 如何在 C++ 和 Python 中右對齊輸出字串?
    如何在 C++ 和 Python 中右對齊輸出字串?
    右對齊格式化輸出字串處理文字檔案時,一致地對齊資料可以增強可讀性和分析能力。在 C 中,出現了一個問題:如何才能格式化右對齊的輸出字串? 使用Python 的格式化語法,解決方案很簡單:line_new = '{:&gt;12} {:&gt;12} {:&gt;12}'....
    程式設計 發佈於2024-11-08
  • 黑客啤酒節第二週
    黑客啤酒節第二週
    第二週,我必須花更少的時間尋找問題。這次是 Mattermost 文件網站在深色模式下發生的錯誤,其中特定按鈕的顏色不正確。 我知道 Docusaurus,因為我看過其他文件和基於它構建的一些課程材料網站。它在底層使用了 React,所以我很熟悉它。但這個文檔網站是用 Python 寫的。雖然我不...
    程式設計 發佈於2024-11-08
  • Python 中的 Try/Except 與 If/Else:哪種方法比較有效?
    Python 中的 Try/Except 與 If/Else:哪種方法比較有效?
    Try/Except 與 If/Else:哪一種方法較可取? 在 Python 中處理異常時,開發人員經常面臨困境是否測試有效性或嘗試某項操作並處理任何產生的異常。本文深入探討了每種方法的細微差別,為決策提供指導和範例。 嘗試/除外:擁抱例外根據 PEP 20,錯誤除非明確地保持沉默,否則絕不應悄無...
    程式設計 發佈於2024-11-08
  • Git 遠端分支
    Git 遠端分支
    本週我們必須在另一個人的儲存庫中添加一個功能。具體來說,我們需要在使用者的 $HOME 資料夾中新增一個預設配置 TOML 文件,其中包含 CLI 工具的預設參數。我已為 readMeMaker 儲存庫做出了貢獻: https://github.com/jadorotan/readMeMaker.g...
    程式設計 發佈於2024-11-08
  • 對於簡單的操作,流總是比傳統集合慢嗎?
    對於簡單的操作,流總是比傳統集合慢嗎?
    Java 8 流性能對比傳統集合您最近涉足Java 8 並進行了非正式基準測試,以將其Stream API 與經典集合的表現進行比較。您的測試涉及過濾整數列表、提取偶數的平方根並將結果儲存在 Double 列表中。然而,您質疑測試的有效性,並渴望澄清真正的效能影響。 評估基準測試您的初步結果,表明流...
    程式設計 發佈於2024-11-08
  • 語言 API,允許您添加您的母語。
    語言 API,允許您添加您的母語。
    早在2016 年4 月,我就有了為一個我非常喜歡的部落“Igede Language”創建一個字典項目的想法,我決定將其稱為“Igede Dictionary ”,儘管我不是“ t 是母語人士。 這讓我撰寫並翻譯了 5,000 多個單詞,從 Igede 語言翻譯成英語。毫無疑問,這是我曾經研究過或擁...
    程式設計 發佈於2024-11-08
  • 使用 Playwright、TypeScript 和 JavaScript 進行自動化
    使用 Playwright、TypeScript 和 JavaScript 進行自動化
    剧作家与 TypeScript | JavaScript 安装 Playwright 是 Microsoft 与 Puppeteer 团队合作推出的基于 Web 的现代 API 自动化工具,Puppeteer 是一个 JavaScript 库,它提供高级 API 来通过 DevTools 协议或 W...
    程式設計 發佈於2024-11-08
  • Python 中的整數有幾個位元?
    Python 中的整數有幾個位元?
    計算整數的位數在Python中,整數沒有固有的長度概念。但是,如果您需要確定整數中的位數,可以考慮以下幾種方法。 轉換為字串一個簡單的方法是將整數轉換為字串,然後計算結果字串的長度。例如:length = len(str(123))這種方法很簡單,但需要將整數轉換為字串的中間步驟。 使用對數另一個...
    程式設計 發佈於2024-11-08
  • 為什麼使用 Z-Index 時我的偽元素會出現在標題元素上方?
    為什麼使用 Z-Index 時我的偽元素會出現在標題元素上方?
    Z-Index 與偽元素:案例研究在CSS 中,z-index 屬性指定元素的堆疊順序頁面,確定哪些元素出現在其他元素“前面”或“後面”。然而,當涉及偽元素時,例如 ::before 或 ::after,它們與 z-index 的交互有時可能不那麼簡單。 考慮一個場景,我們使用::before 偽元...
    程式設計 發佈於2024-11-08
  • 如何在剝離標籤之前刪除頑固的 HTML 特殊字元?
    如何在剝離標籤之前刪除頑固的 HTML 特殊字元?
    去除頑固的HTML 特殊字符strip_tags 函數雖然擅長刪除HTML 標籤,但無法處理討厭的HTML 特殊字符,例如用於不間斷空格或© 用於版權符號。這可能是創建乾淨 RSS 來源的絆腳石。 要解決此問題,請考慮使用以下策略之一:HTML 實體解碼:在字串經過strip_tags 之前,使用h...
    程式設計 發佈於2024-11-08
  • 如何在 Go 中解密 AES ECB 模式加密?
    如何在 Go 中解密 AES ECB 模式加密?
    Go 中的AES ECB 加密Go 中的AES ECB 加密package main import ( "crypto/aes" "fmt" ) func decryptAes128Ecb(data, key []byte) []byte { ...
    程式設計 發佈於2024-11-08
  • PHP 會話管理中的 session_unset() 和 session_destroy() 有什麼不同?
    PHP 會話管理中的 session_unset() 和 session_destroy() 有什麼不同?
    揭示PHP 中session_unset() 和session_destroy() 的獨特作用在PHP 會話管理領域,出現了兩個關鍵函數: session_unset() 和session_destroy()。雖然它們似乎都圍繞著會話資料操作,但它們的功能和效果卻顯著不同。 1。理解差異根據 PHP...
    程式設計 發佈於2024-11-08
  • 使用 Vue jsx 進行動態佈局:靈活且可維護的 UI 指南
    使用 Vue jsx 進行動態佈局:靈活且可維護的 UI 指南
    Written by Dubem Izuorah Have you ever spent hours tweaking the same web layout across multiple pages or struggled to make your UI adapt to changing ...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3