Kennisbank
1.000 veelgestelde vragen, 500 tutorials en uitlegvideo's. Hier vind je alleen maar oplossingen!
Een probleem met het importeren van een CSV-bestand in een MySQL-tabel oplossen
Deze handleiding legt uit hoe u een probleem kunt oplossen bij het importeren van een .csv-bestand in een MySQL-tabel. De voorgestelde oplossing is om het CSV-bestand regel voor regel te lezen met PHP en de gegevens in de MySQL-database in te voegen.
De functie "LOAD DATA LOCAL INFILE" is uitgeschakeld
De functie LOAD DATA LOCAL INFILE maakt het mogelijk om een CSV-bestand rechtstreeks in een MySQL-tabel te importeren. Deze functionaliteit wordt echter vaak misbruikt door aanvallers om ongeautoriseerde toegang te krijgen tot websites die op servers worden gehost waar deze functie is toegestaan.
Om eventuele beveiligingsrisico's te voorkomen en de gegevens van klanten te beschermen, heeft Infomaniak de functie LOAD DATA LOCAL INFILE uitgeschakeld. Gebruikers die hun CSV-bestanden importeren via phpMyAdmin (zonder de optie “CSV via LOAD DATA” aan te vinken) ondervinden hier geen hinder van.
Hieronder vindt u een alternatieve methode om gegevens in CSV-formaat te importeren in een MySQL-tabel. Het onderstaande voorbeeld laat zien hoe u fouten correct kunt afhandelen bij het openen van het CSV-bestand en het invoegen van de gegevens in de database.
Dit script gebruikt mysqli om verbinding te maken met de database en voorbereide query's om de gegevens in te voegen. Dit garandeert een betere beveiliging, optimale compatibiliteit met recente versies van PHP en een eenvoudige integratie in uw project, of het nu gaat om een bestaand script of een nieuw bestand in de map /web:
$fileName = "data.csv";
// Maak verbinding met de MySQL-database met behulp van mysqli
$link = new mysqli("localhost", "username", "password", "database");
// Controleer de databaseverbinding
if ($link->connect_error) {
die("Verbindingsfout: " . $link->connect_error);
}
// Open het CSV-bestand om te lezen
if (($handle = fopen($fileName, "r")) !== FALSE) {
// Lees elke regel van het CSV-bestand
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
// Bereid de SQL-query dynamisch voor
$query = "INSERT INTO `test` VALUES (" . str_repeat('?,', count($data) - 1) . "?)";
$stmt = $link->prepare($query);
// Controleer of het voorbereiden van de query succesvol was
if ($stmt === FALSE) {
die("Het voorbereiden van de query is mislukt: " . $link->error);
}
// Koppel parameters (uitgaande van alle kolommen zijn strings)
$types = str_repeat('s', count($data));
$stmt->bind_param($types, ...$data);
// Voer de query uit
if (!$stmt->execute()) {
die("Het uitvoeren van de query is mislukt: " . $stmt->error);
}
// Sluit de statement
$stmt->close();
}
// Sluit het CSV-bestand
fclose($handle);
} else {
echo "Fout: het bestand kan niet worden geopend.\n";
exit(1);
}
// Sluit de databaseverbinding
$link->close();
?>
Hulp krijgen
Het is helaas niet mogelijk om precies aan te geven op welke plek in het script deze regels code moeten worden ingevoegd.
Als deze methode problemen oplevert (bijvoorbeeld bij het gelijktijdig importeren van meerdere CSV-bestanden zonder foutmelding), kan het zijn dat de structuur van de tabellen of de indexering van de velden de oorzaak is. Neem in dat geval contact op met uw webmaster voor controle.
Raadpleeg ook de officiële PHP-documentatie over de functie fgetcsv().
Link naar deze veelgestelde vragen: https://faq.infomaniak.com/1312
Is deze veelgestelde vragenlijst nuttig geweest?