Heim  >  Artikel  >  Datenbank  >  Wie importiert man große MySQL-Dateien in PHP: Eine speichereffiziente Lösung mit Split-Query-Ansatz?

Wie importiert man große MySQL-Dateien in PHP: Eine speichereffiziente Lösung mit Split-Query-Ansatz?

Barbara Streisand
Barbara StreisandOriginal
2024-10-31 04:50:30654Durchsuche

How to Import Large MySQL Files in PHP: A Memory-Efficient Solution with Split-Query Approach?

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:

  • Feldtrennzeichen in Daten erkennen
  • Umgang mit Zeilenumbrüchen in Memofeldern
  • Vermeidung von Speicherproblemen aufgrund großer Dateigröße

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn