Rumah >pangkalan data >tutorial mysql >Bagaimanakah saya boleh memisahkan dan melaksanakan fail MySQL yang besar dengan cekap dalam persekitaran PHP tanpa membebankan memori?
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.
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>
Fungsi ini menangani gotcha biasa seperti pembatas medan dan pemisah baris dalam medan memo.
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>
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;
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!