ホームページ >データベース >mysql チュートリアル >PHP を使用して大きな MySQL ファイルを共有ホスティング環境にインポートするにはどうすればよいですか?

PHP を使用して大きな MySQL ファイルを共有ホスティング環境にインポートするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-31 11:30:17993ブラウズ

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

PHP での MySQL データベース インポートの最適化: クエリを確実に分割する

Web 開発の領域では、共有サーバーでホストされている Web サイトを更新するシナリオが発生します。データベースの更新が必要になります。ただし、外部から MySQL にアクセスできないことが課題となります。これに対処するには、PHP 経由で MySQL ファイルをインポートする必要があります。この記事では、大規模な MySQL データベース ファイルを個々のクエリに分割し、PHP を使用してインポートする効率的なソリューションを検討します。

問題ステートメント

目的は、信頼できる方法を開発することです。ファイル全体を同時に開かずに、大きなデータベース ファイルを個々のクエリに分割します。制約には、MySQL コマンド ライン関数、LOAD DATA INFILE、phpMyAdmin、mysqli_multi_query() が使用できないことが含まれます。

解決策: SplitSQL 関数

解決策はメモリにあります。 SplitSQL と呼ばれる便利な関数。ファイルを 1 行ずつ反復処理し、クエリ区切り文字を識別します。区切り文字に遭遇するまで行を配列に蓄積し、完全なクエリを形成します。次に、関数はクエリを実行し、その成功または失敗に関するフィードバックを提供します。

実装

<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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。