當前位置: 首頁> 最新文章列表> 如何捕捉$errno 並將錯誤上報至Sentry 或其他監控工具

如何捕捉$errno 並將錯誤上報至Sentry 或其他監控工具

M66 2025-06-05

在開發PHP 應用時,數據庫錯誤是常見的異常之一,特別是在使用mysqli擴展進行數據庫操作時,如何有效地捕捉這些錯誤並及時上報監控平台,可以幫助開發者更快地發現和解決問題。本文將介紹如何使用mysqli::$errno捕捉數據庫錯誤,並將錯誤信息上報到Sentry 或其他監控平台,確保您的系統保持穩定性和高效性。

1. 什麼是mysqli::$errno

mysqli::$errnomysqli類中一個非常重要的屬性,它用於獲取上一次數據庫操作的錯誤代碼。如果操作成功, errno會返回0 ,如果發生了錯誤,則會返回對應的錯誤代碼。通過這個屬性,您可以輕鬆判斷數據庫操作是否成功。

2. 基本的mysqli錯誤捕捉方式

在進行數據庫操作時,我們通常會進行錯誤檢測,以便及時發現和處理異常。一個簡單的示例如下:

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    echo "連接失敗: " . $mysqli->connect_error;
    exit();
}

$query = "SELECT * FROM nonexistent_table";
$result = $mysqli->query($query);

if ($mysqli->errno) {
    echo "SQL 錯誤代碼: " . $mysqli->errno . " 錯誤訊息: " . $mysqli->error;
}
?>

上面的代碼示例展示瞭如何在進行查詢時使用mysqli::$errno來捕捉錯誤並輸出相應的錯誤信息。

3. 將錯誤上報到Sentry

Sentry 是一個流行的錯誤跟踪和監控平台,它可以幫助開發者實時捕捉並處理應用程序中的錯誤。為了將錯誤信息發送到Sentry,首先需要安裝Sentry 的SDK。

使用Composer 安裝Sentry PHP SDK:

 composer require sentry/sdk

然後,在您的代碼中集成Sentry 來上報錯誤,代碼如下:

 <?php
require 'vendor/autoload.php';

// 初始化 Sentry
Sentry\init(['dsn' => 'https://your_sentry_dsn_url@m66.net']);

$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    echo "連接失敗: " . $mysqli->connect_error;
    exit();
}

$query = "SELECT * FROM nonexistent_table";
$result = $mysqli->query($query);

if ($mysqli->errno) {
    // 捕獲數據庫錯誤,並將其上報到 Sentry
    Sentry\captureException(new Exception("SQL 錯誤代碼: " . $mysqli->errno . " 錯誤訊息: " . $mysqli->error));
    echo "發生了錯誤,已上報到監控平台。";
}
?>

在上面的代碼中,當mysqli執行查詢時,如果發生了錯誤,錯誤信息會通過Sentry\captureException()方法被上報到Sentry 平台進行監控。

4. 使用其他監控平台

除了Sentry,您也可以將錯誤信息發送到其他監控平台。以下是使用不同平台的基本集成方式:

a) 使用Bugsnag

Bugsnag 是另一個流行的錯誤監控工具。您可以通過以下方式將錯誤發送到Bugsnag:

 require 'vendor/autoload.php';

// 初始化 Bugsnag
Bugsnag::start('your_bugsnag_api_key');

$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    echo "連接失敗: " . $mysqli->connect_error;
    exit();
}

$query = "SELECT * FROM nonexistent_table";
$result = $mysqli->query($query);

if ($mysqli->errno) {
    // 捕獲數據庫錯誤,並將其上報到 Bugsnag
    Bugsnag::notifyException(new Exception("SQL 錯誤代碼: " . $mysqli->errno . " 錯誤訊息: " . $mysqli->error));
    echo "發生了錯誤,已上報到 Bugsnag。";
}

b) 使用LogRocket

LogRocket 是另一個支持前端和後端錯誤追踪的工具。如果您的PHP 後端需要集成LogRocket,您可以通過API 上報錯誤信息:

 require 'vendor/autoload.php';

// LogRocket 集成 (假設 LogRocket PHP SDK 已存在)
LogRocket::init('your_logrocket_project_id');

$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    echo "連接失敗: " . $mysqli->connect_error;
    exit();
}

$query = "SELECT * FROM nonexistent_table";
$result = $mysqli->query($query);

if ($mysqli->errno) {
    // 捕獲數據庫錯誤,並將其上報到 LogRocket
    LogRocket::captureError("SQL 錯誤代碼: " . $mysqli->errno . " 錯誤訊息: " . $mysqli->error);
    echo "發生了錯誤,已上報到 LogRocket。";
}

5. 完整示例:集成Sentry 和錯誤捕捉

綜合上述內容,您可以參考以下完整示例,使用mysqli::$errno捕捉數據庫錯誤並上報到Sentry:

 <?php
require 'vendor/autoload.php';

// 初始化 Sentry
Sentry\init(['dsn' => 'https://your_sentry_dsn_url@m66.net']);

$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    echo "連接失敗: " . $mysqli->connect_error;
    exit();
}

$query = "SELECT * FROM nonexistent_table";
$result = $mysqli->query($query);

if ($mysqli->errno) {
    // 捕獲數據庫錯誤,並將其上報到 Sentry
    Sentry\captureException(new Exception("SQL 錯誤代碼: " . $mysqli->errno . " 錯誤訊息: " . $mysqli->error));
    echo "發生了錯誤,已上報到 Sentry。";
}
?>

6. 總結

通過使用mysqli::$errno屬性,您可以輕鬆地捕捉數據庫操作中的錯誤,並將其上報到Sentry、Bugsnag 或LogRocket 等監控平台。這樣,您就可以及時發現潛在問題,增強系統的穩定性和可維護性。

在集成這些監控工具時,記得選擇適合您項目的SDK,並根據平台文檔進行相應的配置。