Wissensdatenbank

1 000 FAQs, 500 Anleitungen und erläuternde Videos. Hier gibt es nur Lösungen!

Ein Problem beim Importieren einer CSV-Datei in eine MySQL-Tabelle beheben

Aktualisierung 06.08.2026

Diese Anleitung erklärt, wie Sie ein Problem beim Importieren einer .csv-Datei in eine MySQL-Tabelle beheben können. Die vorgeschlagene Alternative besteht darin, die CSV-Datei zeilenweise mit PHP zu lesen und die Daten in die MySQL-Datenbank einzufügen.

 

Die Funktion „LOAD DATA LOCAL INFILE“ ist deaktiviert

Die Funktion LOAD DATA LOCAL INFILE ermöglicht den direkten Import einer CSV-Datei in eine MySQL-Tabelle. Diese Funktion wird jedoch häufig von Angreifern ausgenutzt, um unbefugten Zugriff auf Websites zu erhalten, die auf Servern gehostet werden, die diese Funktion zulassen.

Um Sicherheitsrisiken zu vermeiden und die Daten der Kunden zu schützen, hat Infomaniak die Funktion LOAD DATA LOCAL INFILE deaktiviert. Benutzer, die ihre CSV-Dateien über phpMyAdmin importieren (ohne die Option „CSV via LOAD DATA“ zu aktivieren), sind davon nicht betroffen.

Hier ist eine alternative Methode, um Daten im CSV-Format in eine MySQL-Tabelle zu importieren. Das folgende Beispiel zeigt, wie Fehler beim Öffnen der CSV-Datei und beim Einfügen der Daten in die Datenbank korrekt behandelt werden.

Dieses Skript verwendet mysqli, um sich mit der Datenbank zu verbinden, und vorbereitete Anweisungen, um die Daten einzufügen. Dies gewährleistet eine bessere Sicherheit, optimale Kompatibilität mit neueren Versionen von PHP und eine einfache Integration in Ihr Projekt, sei es in einem vorhandenen Skript oder einer neuen Datei im Verzeichnis /web:

$fileName = "data.csv";

// Verbindung zur MySQL-Datenbank mit mysqli herstellen
$link = new mysqli("localhost", "username", "password", "database");

// Datenbankverbindung überprüfen
if ($link->connect_error) {
   die("Verbindung fehlgeschlagen: " . $link->connect_error);
}

// CSV-Datei zum Lesen öffnen
if (($handle = fopen($fileName, "r")) !== FALSE) {

   // Jede Zeile der CSV-Datei lesen
   while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {

       // SQL-Abfrage dynamisch vorbereiten
       $query = "INSERT INTO `test` VALUES (" . str_repeat('?,', count($data) - 1) . "?)";
       $stmt = $link->prepare($query);

       // Überprüfen, ob die Abfrage erfolgreich vorbereitet wurde
       if ($stmt === FALSE) {
           die("Abfragevorbereitung fehlgeschlagen: " . $link->error);
       }

       // Parameter binden (Annahme: alle Spalten sind Zeichenketten)
       $types = str_repeat('s', count($data));
       $stmt->bind_param($types, ...$data);

       // Abfrage ausführen
       if (!$stmt->execute()) {
           die("Abfrageausführung fehlgeschlagen: " . $stmt->error);
       }

       // Anweisung schließen
       $stmt->close();
   }

   // CSV-Datei schließen
   fclose($handle);

} else {
   echo "Fehler: Datei konnte nicht geöffnet werden.\n";
   exit(1);
}

// Datenbankverbindung schließen
$link->close();
?>

 

Hilfe erhalten

Es ist leider nicht möglich, genau anzugeben, an welcher Stelle des Skripts diese Codezeilen eingefügt werden müssen.

Wenn diese Methode Probleme verursacht (z. B. beim gleichzeitigen Import mehrerer CSV-Dateien ohne Fehlermeldung), kann dies an der Struktur der Tabellen oder der Indizierung der Felder liegen. Wenden Sie sich in diesem Fall an Ihren Webmaster, damit dieser dies überprüft.

Lesen Sie auch die offizielle PHP-Dokumentation zur Funktion fgetcsv().


War diese FAQ nützlich?