Heim >Datenbank >MySQL-Tutorial >Wie kann ich große MySQL-Dateien in einer PHP-Umgebung effizient aufteilen und ausführen, ohne den Speicher zu überlasten?
Beim Importieren großer MySQL-Dateien in eine PHP-basierte Website ist es entscheidend, Abfragen effizient zu bearbeiten. Ohne Zugriff auf die MySQL-Befehlszeile ist das Aufteilen einer Datei in einzelne Abfragen unerlässlich.
Die folgende Funktion teilt eine große SQL-Datei in einzelne Abfragen auf, ohne dass die gesamte Datei dazu erforderlich ist in den Speicher geladen werden:
<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>
Diese Funktion behebt häufige Fallstricke wie Feldtrennzeichen und Zeilenumbrüche in Memofeldern.
Zur Demonstration der Funktion Um die Wirksamkeit zu verbessern, berücksichtigen Sie die folgenden Testdaten:
<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>
Das Ausführen der SplitSQL-Funktion für diese Daten erzeugt die folgende Ausgabe:
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;
Dies zeigt die Zuverlässigkeit der Funktion bei der genauen Aufteilung von Abfragen.
Das obige ist der detaillierte Inhalt vonWie kann ich große MySQL-Dateien in einer PHP-Umgebung effizient aufteilen und ausführen, ohne den Speicher zu überlasten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!