在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中文網其他相關文章!