Importieren einer großen MySQL-Datei in PHP: Eine umfassende Split-Query-Lösung
Das Importieren einer großen MySQL-Datei in die Website eines Shared-Hosting-Anbieters ist möglich kann eine Herausforderung darstellen, insbesondere wenn PHP verwendet wird und der externe Zugriff auf MySQL eingeschränkt ist. Dieser Artikel bietet eine umfassende Lösung, die dieses Problem behebt, indem die Datei für den Import zuverlässig in einzelne Abfragen aufgeteilt wird.
Zu berücksichtigende Herausforderungen
Beim Parsen und Abfragen einer großen MySQL-Datei In PHP ergeben sich mehrere Herausforderungen:
Eine zuverlässige Split-Query-Lösung
Um diese Herausforderungen zu meistern, stellt dieser Artikel eine speicherfreundliche Funktion namens SplitSQL() vor. Diese Funktion liest die Datei Zeile für Zeile und sammelt einzelne Abfragen, bis ein Abfragetrennzeichen (z. B. ein Semikolon) gefunden wird. Hier ist der Code:
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; }
Speicherfreundlich und getestet
Diese Funktion weist Speicher nur nach Bedarf zu und vermeidet so Speicherprobleme. Es wurde auf großen phpMyAdmin-SQL-Dumps getestet und hat seine Fähigkeit bewiesen, reale Daten effektiv zu verarbeiten.
Daten und Ausgabe testen
Beispieldaten und ihre jeweilige Ausgabe mit die SplitSQL()-Funktion:
Testdaten:
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;
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;
Fazit
Die SplitSQL()-Funktion bietet eine robuste und zuverlässige Lösung zum Aufteilen großer MySQL-Dateien in einzelne Abfragen und ermöglicht einen effizienten und automatisierten Datenbankimport in Shared-Hosting-Umgebungen. Durch die Behebung von Speicherbeschränkungen und die Berücksichtigung verschiedener Datentypen vereinfacht diese Funktion den komplexen Prozess des Imports großer MySQL-Dateien in PHP.
Das obige ist der detaillierte Inhalt vonWie importiert man große MySQL-Dateien in PHP: Eine speichereffiziente Lösung mit Split-Query-Ansatz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!