Rumah > pangkalan data > tutorial mysql > Bagaimanakah saya boleh memisahkan dan melaksanakan fail MySQL yang besar dengan cekap dalam persekitaran PHP tanpa membebankan memori?

Bagaimanakah saya boleh memisahkan dan melaksanakan fail MySQL yang besar dengan cekap dalam persekitaran PHP tanpa membebankan memori?

DDD
Lepaskan: 2024-10-29 10:40:29
asal
817 orang telah melayarinya

How can I efficiently split and execute large MySQL files within a PHP environment without overloading memory?

Mengimport Fail MySQL dalam PHP: Membahagikan Pertanyaan Dengan Berkesan

Apabila mengimport fail MySQL yang besar ke dalam tapak web berkuasa PHP, adalah penting untuk mengendalikan pertanyaan dengan cekap. Tanpa akses kepada baris arahan MySQL, pemisahan fail kepada pertanyaan tunggal menjadi penting.

Penyelesaian Mesra Memori

Fungsi berikut membahagikan fail SQL yang besar kepada pertanyaan individu tanpa memerlukan keseluruhan fail untuk dimuatkan ke dalam ingatan:

<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>
Salin selepas log masuk

Fungsi ini menangani gotcha biasa seperti pembatas medan dan pemisah baris dalam medan memo.

Data dan Output Ujian

Untuk menunjukkan fungsi fungsi keberkesanan, pertimbangkan data ujian berikut:

<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>
Salin selepas log masuk

Melaksanakan fungsi SplitSQL pada data ini menghasilkan output berikut:

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;
Salin selepas log masuk

Ini menunjukkan kebolehpercayaan fungsi dalam membelah pertanyaan dengan tepat.

Atas ialah kandungan terperinci Bagaimanakah saya boleh memisahkan dan melaksanakan fail MySQL yang besar dengan cekap dalam persekitaran PHP tanpa membebankan memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan