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 die Personen, die ihre CSV-Dateien (vorausgesetzt, sie aktivieren 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 beim Ăffnen der CSV-Datei und beim 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 die PHP-Dokumentation zu fgetcsv
zur Kenntnis.
â ïž FĂŒr zusĂ€tzliche Hilfe kontaktieren Sie einen Partner oder starten Sie kostenlos eine Ausschreibung â erfahren Sie auch mehr ĂŒber die Rolle des Hosters.