PHP での大きな MySQL ファイルのインポート: 包括的な分割クエリ ソリューション
大きな MySQL ファイルを共有ホスティング プロバイダー Web サイトにインポートすると、次のことが可能になります。特に PHP を使用しており、MySQL への外部アクセスが制限されている場合は、困難になります。この記事では、ファイルを確実に個別のクエリに分割してインポートすることで、この問題に対処する包括的なソリューションを提供します。
考慮すべき課題
大きな MySQL ファイルを解析してクエリする場合PHP では、次のようないくつかの課題が発生します。
信頼性の高い分割クエリ ソリューション
これらの課題を克服するために、この記事では SplitSQL() と呼ばれるメモリに優しい関数を紹介します。この関数はファイルを 1 行ずつ読み取り、クエリ区切り文字 (セミコロンなど) が見つかるまで個々のクエリを蓄積します。コードは次のとおりです。
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 中国語 Web サイトの他の関連記事を参照してください。