1000 FAQ, 500 Anleitungen und Lernvideos. Hier gibt es nur Lösungen!
Ein Problem beim Importieren einer CSV-Datei in eine MySQL-Tabelle beheben
Diese Anleitung erklärt, wie man ein Problem beim Importieren einer .csv-Datei in eine MySQL-Tabelle löst. Die vorgeschlagene Alternative besteht darin, die CSV-Datei Zeile für Zeile mit PHP zu lesen und die Daten in die MySQL-Datenbank einzufügen.
Funktion "load data local infile" deaktiviert
Die Funktion LOAD DATA LOCAL INFILE
ermöglicht das Importieren einer CSV-Datei in eine MySQL-Tabelle und wird leider zunehmend von Hackern genutzt, um Zugriff auf bestimmte Websites zu erhalten, die auf Maschinen gehostet werden, die diese Funktion akzeptieren.
Um gegen böswillige Handlungen vorzugehen und die Daten der Kunden so weit wie möglich zu schützen, hat Infomaniak die Funktion LOAD DATA LOCAL INFILE
deaktiviert. Von dieser Änderung nicht betroffen sind Personen, die ihre CSV-Dateien (vorausgesetzt, sie wählen nicht "CSV via LOAD DATA") über phpMyAdmin importieren.
Hier ist eine Alternative, um weiterhin Daten im CSV-Format in eine MySQL-Tabelle zu importieren, ein vollständiges Beispiel (auf Französisch) des Codes mit einer korrekten Fehlerbehandlung zum Öffnen der CSV-Datei und zum Einfügen der Daten in die Datenbank.
Diese Version verwendet mysqli
, um eine Verbindung zur Datenbank herzustellen, und vorbereitete Abfragen zum Einfügen der Daten, wodurch eine bessere Sicherheit und Kompatibilität mit den neuesten PHP-Versionen sowie eine einfache Implementierung in Ihrem PHP-Skript oder einfach in einer neuen PHP-Datei in Ihrem Verzeichnis /web gewährleistet wird:
$NomDuFichier = "data.csv";
// Connexion à la base de données MySQL avec mysqli
$link = new mysqli("localhost", "username", "password", "database");
// Vérification de la connexion
if ($link->connect_error) {
die("Échec de la connexion : " . $link->connect_error);
}
// Ouverture du fichier CSV en lecture
if (($handle = fopen($NomDuFichier, "r")) !== FALSE) {
// Décomposition de chaque ligne du fichier CSV
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
// Préparation de la requête SQL
$query = "INSERT INTO `test` VALUES (" . str_repeat('?,', count($data) - 1) . "?)";
$stmt = $link->prepare($query);
// Vérification de la préparation de la requête
if ($stmt === FALSE) {
die("Échec de la préparation de la requête : " . $link->error);
}
// Liaison des paramètres
$types = str_repeat('s', count($data)); // Assume que toutes les colonnes sont de type string
$stmt->bind_param($types, ...$data);
// Exécution de la requête
if (!$stmt->execute()) {
die("Échec de l'exécution de la requête : " . $stmt->error);
}
// Fermeture de la déclaration
$stmt->close();
}
// Fermeture du fichier CSV
fclose($handle);
} else {
echo "Erreur : impossible d'ouvrir le fichier.
";
exit(1);
}
// Fermeture de la connexion à la base de données
$link->close();
?>
Hilfe erhalten
Es ist leider nicht möglich, Ihnen genau anzugeben, an welcher Stelle Ihres Skripts diese Codezeilen hinzugefügt werden müssen.
Falls das vorgeschlagene Verfahren Probleme verursacht, wenn Sie mehrere CSV-Dateien zum Lesen einreichen und das Verfahren beispielsweise ohne Rückmeldung endet, obwohl es Fehlerbehandlungsstellen im PHP-Datei gibt, könnten die verwendeten Tabellen und Felder möglicherweise falsch indiziert sein. In diesem Fall wenden Sie sich auch an Ihren Webmaster.
Nehmen Sie Kenntnis von der PHP-Dokumentation zu fgetcsv
.
Erleichtern Sie sich das Leben! Bei Bedarf können lokale Partner, die von Infomaniak empfohlen werden, diese Schritte übernehmen. Starten Sie eine kostenlose Ausschreibung. Sie kümmern sich um alles und entlasten Sie von den technischen Details.