首頁  >  文章  >  資料庫  >  如何在 PHP 中匯入大型 MySQL 檔案:採用分割查詢方法的記憶體高效解決方案?

如何在 PHP 中匯入大型 MySQL 檔案:採用分割查詢方法的記憶體高效解決方案?

Barbara Streisand
Barbara Streisand原創
2024-10-31 04:50:30654瀏覽

How to Import Large MySQL Files in PHP: A Memory-Efficient Solution with Split-Query Approach?

在PHP 中匯入大型MySQL 檔案:全面的分割查詢解決方案

將大型MySQL 檔案匯入共用供應商網站可以這是一個挑戰,特別是當使用PHP 並且對MySQL 的外部存取受到限制時。本文提供了一個全面的解決方案,透過可靠地將文件拆分為單獨的查詢進行導入來解決此問題。

需要考慮的挑戰

解析並查詢大型MySQL 檔案時在PHP 中,出現了幾個挑戰:

  • 偵測資料中的欄位分隔符號
  • 處理備註欄位中的換行符
  • 避免因檔案大小太大而導致記憶體問題

可靠的分割查詢解決方案

為了克服這些挑戰,本文介紹了一個名為SplitSQL() 的記憶體友善函數。此函數逐行讀取檔案並累積各個查詢,直到遇到查詢分隔符號(例如分號)。程式碼如下:

function SplitSQL($file, $delimiter = ';') {
  set_time_limit(0);
  if (is_file($file) && is_resource($file = fopen($file, 'r'))) {
    $query = array();
    while (!feof($file)) {
      $query[] = fgets($file);
      if (preg_match('~' . preg_quote($delimiter, '~') . '\s*$~iS', end($query))) {
        $query = trim(implode('', $query));
        if (mysql_query($query) === false) {
          echo 'ERROR: ' . $query . "\n";
        } else {
          echo 'SUCCESS: ' . $query . "\n";
          flush();
        }
        $query = array();
      }
    }
    fclose($file);
    return true;
  }
  return false;
}

內存友好且經過測試

此函數僅根據需要分配內存,避免內存問題。它已經在大型 phpMyAdmin SQL 轉儲上進行了測試,證明了其有效處理現實世界資料的能力。

測試資料和輸出

使用範例資料及其各自的輸出SplitSQL() 函數:

測試資料:

CREATE TABLE IF NOT EXISTS "test" (
  "id" INTEGER PRIMARY KEY AUTOINCREMENT,
  "name" TEXT,
  "description" TEXT
);

BEGIN;
INSERT INTO "test" ("name", "description")
VALUES (";;;", "something for you mind; body; soul");
COMMIT;

UPDATE "test"
SET "name" = "; "
WHERE "id" = 1;

輸出:

SUCCESS: CREATE TABLE IF NOT EXISTS "test" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT, "description" TEXT );
SUCCESS: BEGIN;
SUCCESS: INSERT INTO "test" ("name", "description") VALUES (";;;", "something for you mind; body; soul");
SUCCESS: COMMIT;
SUCCESS: UPDATE "test" SET "name" = "; " WHERE "id" = 1;

結論

SplitSQL() 函式提供了一個強大且可靠的函數提供了一個強大且可靠的函數提供了一個強大且可靠的函數提供了一個強大且可靠的函數提供了一個強大且可靠的函數提供了一個強大且可靠的函數提供了一個強大且可靠的函數提供了一個強大且可靠的函數提供了一個強大且可靠的函數提供了一個強大且可靠的函數提供了一個強大且可靠的函數提供了一個強大且可靠的函數提供了一個強大且可靠的函數提供了一個強大且可靠的函數提供了一個強大且可靠的函數解決方案,用於將大型MySQL 檔案分割為單獨的查詢,從而允許在共享託管環境中高效且自動化地匯入資料庫。透過解決記憶體限制並考慮各種資料類型,該函數簡化了在 PHP 中匯入大型 MySQL 檔案的複雜過程。

以上是如何在 PHP 中匯入大型 MySQL 檔案:採用分割查詢方法的記憶體高效解決方案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn