首頁 >資料庫 >mysql教程 >如何使用 PHP 將大型 MySQL 檔案匯入共享託管環境?

如何使用 PHP 將大型 MySQL 檔案匯入共享託管環境?

Linda Hamilton
Linda Hamilton原創
2024-10-31 11:30:17997瀏覽

How to Import Large MySQL Files into a Shared Hosting Environment Using PHP?

在PHP 中最佳化MySQL 資料庫匯入:可靠地分割查詢

在Web 開發領域,會出現更新共用伺服器上所託管的網站的情況需要更新資料庫。然而,無法從外部存取MySQL帶來了挑戰。為了解決這個問題,需要透過 PHP 匯入 MySQL 檔案。本文探討了一種有效的解決方案,將大型 MySQL 資料庫檔案拆分為單獨的查詢並使用 PHP 匯入它們。

問題陳述

目標是開發一種可靠的方法將大型資料庫檔案拆分為單獨的查詢,而無需同時開啟整個檔案。限制包括 MySQL 命令列函數、LOAD DATA INFILE、phpMyAdmin 和 mysqli_multi_query() 不可用。

解決方案:SplitSQL 函數

解決方案在於記憶體- 稱為 SplitSQL 的友善函數,它逐行迭代檔案並識別查詢分隔符。它將行累積到數組中,直到遇到分隔符,形成完整的查詢。然後函數執行查詢並提供有關其成功或失敗的回饋。

實作

<code class="php">function SplitSQL($file, $delimiter = ';')
{
    set_time_limit(0);

    if (is_file($file) === true)
    {
        $file = fopen($file, 'r');

        if (is_resource($file) === true)
        {
            $query = array();

            while (feof($file) === false)
            {
                $query[] = fgets($file);

                if (preg_match('~' . preg_quote($delimiter, '~') . '\s*$~iS', end($query)) === 1)
                {
                    $query = trim(implode('', $query));

                    if (mysql_query($query) === false)
                    {
                        echo '<h3>ERROR: ' . $query . '</h3>' . "\n";
                    }

                    else
                    {
                        echo '<h3>SUCCESS: ' . $query . '</h3>' . "\n";
                    }

                    while (ob_get_level() > 0)
                    {
                        ob_end_flush();
                    }

                    flush();
                }

                if (is_string($query) === true)
                {
                    $query = array();
                }
            }

            return fclose($file);
        }
    }

    return false;
}</code>

測試與輸出

使用大型phpMyAdmin SQL 轉儲進行測試後,SplitSQL 函數產生了成功的結果。輸入輸出範例如下:

測試資料

<code class="sql">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;</code>

輸出

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 執行它們。它有效地解決了上述限制並實現了資料庫更新的自動導入。這種方法可確保共享託管環境中的無縫資料庫維護。

以上是如何使用 PHP 將大型 MySQL 檔案匯入共享託管環境?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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