當前位置: 首頁> 最新文章列表> mysqli::get_warnings 在導入CSV 數據過程中的應用示例

mysqli::get_warnings 在導入CSV 數據過程中的應用示例

gitbox 2025-05-26

在使用PHP 將CSV 文件導入到MySQL 數據庫時,常常會遇到一些數據格式問題、重複鍵、數據截斷等警告。這些警告不會直接導致導入失敗,但會影響數據的完整性和正確性。為了精準掌握導入過程中出現的潛在問題, mysqli::get_warnings函數就成為了排查和優化導入過程的重要工具。

什麼是mysqli::get_warnings

mysqli::get_warnings是PHP 的mysqli類中用於獲取最近一次數據庫操作所產生的警告信息的方法。它返回一個警告對象鏈,通過它我們可以逐條讀取並分析數據庫執行過程中產生的警告,諸如數據截斷、外鍵約束失敗等。

在導入CSV 的場景中,這些警告信息可以幫助我們定位問題行,及時調整CSV 文件或數據庫結構,避免數據異常。

導入CSV 到MySQL 的常見流程

  1. 讀取CSV 文件內容。

  2. 解析每一行數據。

  3. 使用INSERTLOAD DATA INFILE將數據寫入數據庫。

  4. 調用mysqli::get_warnings獲取執行過程中的警告。

  5. 根據警告結果做相應處理或記錄日誌。

代碼示例:用PHP 導入CSV 並獲取警告

下面示例展示瞭如何用PHP 結合mysqli導入CSV 並使用get_warnings來獲取警告。

 <?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");

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

$csvFile = fopen("data.csv", "r");
if (!$csvFile) {
    die("無法打開 CSV 文件");
}

$lineNumber = 0;
while (($data = fgetcsv($csvFile)) !== false) {
    $lineNumber++;
    // 假設 CSV 有三列: id, name, email
    $id = $mysqli->real_escape_string($data[0]);
    $name = $mysqli->real_escape_string($data[1]);
    $email = $mysqli->real_escape_string($data[2]);

    $sql = "INSERT INTO users (id, name, email) VALUES ('$id', '$name', '$email')";
    if (!$mysqli->query($sql)) {
        echo "1。 $lineNumber 行插入失敗: " . $mysqli->error . "\n";
    } else {
        // 獲取警告信息
        if ($mysqli->warning_count > 0) {
            $warning = $mysqli->get_warnings();
            while ($warning) {
                echo "1。 $lineNumber 行警告: ({$warning->errno}) {$warning->message}\n";
                $warning = $warning->next();
            }
        }
    }
}

fclose($csvFile);
$mysqli->close();
?>

典型警告解析

  • Data truncated for column
    說明導入的數據長度超出字段長度,可能導致數據被截斷。建議檢查CSV 對應字段長度,或者數據庫字段類型是否合理。

  • Duplicate entry
    導入的數據違反了唯一性約束,可能是主鍵或唯一索引衝突。需要核查重複數據並處理。

  • Incorrect datetime value
    日期時間格式不正確,導致插入失敗或異常。檢查CSV 中對應字段格式,確保符合MySQL 要求。

總結

利用mysqli::get_warnings ,我們能在導入CSV 過程中實時捕獲並輸出潛在的警告信息,從而實現更細緻的錯誤診斷和數據質量控制。這不僅提升了數據導入的穩定性,也便於後續的數據清洗和修正。

通過合理處理這些警告,確保導入數據的完整性和準確性,是提升系統數據可靠性的關鍵步驟。