MySQL-Datenbankimport in PHP optimieren: Abfragen zuverlässig aufteilen
Im Bereich der Webentwicklung treten Szenarien auf, in denen Websites aktualisiert werden, die auf gemeinsam genutzten Servern gehostet werden erfordert Datenbankaktualisierungen. Allerdings stellt die fehlende Möglichkeit, von außen auf MySQL zuzugreifen, eine Herausforderung dar. Um dieses Problem zu beheben, ist der Import einer MySQL-Datei über PHP erforderlich. In diesem Artikel wird eine effiziente Lösung untersucht, um große MySQL-Datenbankdateien in einzelne Abfragen aufzuteilen und sie mithilfe von PHP zu importieren.
Problemstellung
Ziel ist es, eine zuverlässige Methode für zu entwickeln Aufteilen einer großen Datenbankdatei in einzelne Abfragen, ohne die gesamte Datei gleichzeitig zu öffnen. Zu den Einschränkungen gehört die Nichtverfügbarkeit der MySQL-Befehlszeilenfunktion LOAD DATA INFILE, phpMyAdmin und mysqli_multi_query().
Lösung: SplitSQL-Funktion
Die Lösung liegt in einem Speicher -freundliche Funktion namens SplitSQL, die die Datei Zeile für Zeile durchläuft und Abfragetrennzeichen identifiziert. Es sammelt Zeilen in einem Array, bis ein Trennzeichen gefunden wird, und bildet so eine vollständige Abfrage. Die Funktion führt dann die Abfrage aus und gibt Rückmeldung über deren Erfolg oder Misserfolg.
Implementierung
<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>
Testen und Ausgabe
Beim Testen mit einem großen phpMyAdmin-SQL-Dump lieferte die SplitSQL-Funktion erfolgreiche Ergebnisse. Beispieleingabe und -ausgabe lauten wie folgt:
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>
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 zuverlässige Lösung, um große MySQL-Datenbankdateien in einzelne Abfragen aufzuteilen und diese mit PHP auszuführen. Es beseitigt effektiv die oben genannten Einschränkungen und ermöglicht den automatisierten Import von Datenbankaktualisierungen. Dieser Ansatz gewährleistet eine nahtlose Datenbankwartung in Shared-Hosting-Umgebungen.
Das obige ist der detaillierte Inhalt vonWie importiere ich große MySQL-Dateien mit PHP in eine Shared-Hosting-Umgebung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!