首頁 > 後端開發 > php教程 > 為什麼「mysqli_query() 或 die()」是一種不好的做法,有哪些更好的選擇?

為什麼「mysqli_query() 或 die()」是一種不好的做法,有哪些更好的選擇?

Linda Hamilton
發布: 2025-01-01 07:05:08
原創
837 人瀏覽過

Why is

「Mysqli or Die」的危險:PHP 中的替代錯誤處理

當使用mysqli 擴充與MySQL 資料庫互動時,它使用「or die」結構來處理錯誤是常見的做法。然而,這種方法存在一些值得探索的缺點。

為什麼「Or Die」應該消失?

  • 系統內部結構的暴露:「Or die」顯示敏感系統訊息,可能會將漏洞暴露給惡意軟體
  • 使用者困惑:錯誤訊息可能很神秘,讓沒有技術專業知識的臨時使用者感到沮喪。
  • 腳本終止:「要嘛死」突然終止腳本執行,破壞使用者體驗並阻礙錯誤分析。
  • 缺乏可恢復性:與異常不同,「或死亡」沒有提供優雅恢復或錯誤記錄的機會。
  • 缺少錯誤位置:「Or die」不提供任何導致錯誤的行的指示,這使得查找起來很乏味debug.

「Or Die」的替代品

強烈建議配置mysqli在錯誤時拋出異常,而不是依賴“or die” 。這可以透過以下程式碼來實現:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
登入後複製

隨後,無需任何額外程式碼即可執行MySQL 命令:

$result = mysqli_query($link, $sql);
登入後複製

異常處理

當異常發生時,可以被捕獲並進行適當的處理。例如:

try {
    $result = mysqli_query($link, $sql);
} catch (mysqli_sql_exception $e) {
    // Log the error in a custom table or file
    log_error($e->getMessage());
}
登入後複製

自訂錯誤日誌記錄

除了異常處理之外,還需要建立一個自訂的錯誤日誌系統。這允許將錯誤記錄在專用表或檔案中,從而提供用於故障排除的集中儲存庫。日誌功能可以實現如下:

function log_error($message) {
    // Connect to the error logging table database
    $error_conn = connect_to_error_logging_db();

    // Insert the error message into the error logging table
    $query = "INSERT INTO error_log (message, timestamp) VALUES ('$message', NOW())";
    mysqli_query($error_conn, $query);

    // Close the error logging database connection
    mysqli_close($error_conn);
}
登入後複製

以上是為什麼「mysqli_query() 或 die()」是一種不好的做法,有哪些更好的選擇?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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