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. Een 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 functie wordt echter vaak misbruikt door aanvallers om ongeautoriseerde toegang te krijgen tot websites die op servers worden gehost waar deze functie is toegestaan.
Om 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" te activeren), ondervinden hier geen problemen van.
Hieronder volgt een alternatieve methode om CSV-gegevens in een MySQL-tabel te importeren. Het volgende voorbeeld laat zien hoe fouten bij het openen van het CSV-bestand en het invoegen van de gegevens in de database correct kunnen worden afgehandeld.
Dit script gebruikt mysqli om een verbinding met de database tot stand te brengen en maakt gebruik van voorbereide queries om de gegevens in te voegen. Dit zorgt voor een betere beveiliging, optimale compatibiliteit met de nieuwste 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";
// Connect to MySQL database using mysqli
$link = new mysqli("localhost", "username", "password", "database");
// Check database connection
if ($link->connect_error) {
die("Connection failed: " . $link->connect_error);
}
// Open the CSV file for reading
if (($handle = fopen($fileName, "r")) !== FALSE) {
// Read each line of the CSV file
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
// Prepare the SQL query dynamically
$query = "INSERT INTO `test` VALUES (" . str_repeat('?,', count($data) - 1) . "?)";
$stmt = $link->prepare($query);
// Check if query preparation was successful
if ($stmt === FALSE) {
die("Query preparation failed: " . $link->error);
}
// Bind parameters (assuming all columns are strings)
$types = str_repeat('s', count($data));
$stmt->bind_param($types, ...$data);
// Execute the query
if (!$stmt->execute()) {
die("Query execution failed: " . $stmt->error);
}
// Close the statement
$stmt->close();
}
// Close the CSV file
fclose($handle);
} else {
echo "Error: unable to open the file.\n";
exit(1);
}
// Close the database connection
$link->close();
?>Hulp krijgen
Helaas is het niet mogelijk om precies aan te geven op welke plek in het script deze codefragmenten moeten worden ingevoegd.
Als deze methode problemen veroorzaakt (bijvoorbeeld bij het tegelijkertijd importeren van meerdere CSV-bestanden zonder foutmelding), kan de structuur van de tabellen of de indexering van de velden de oorzaak zijn. Neem in dat geval contact op met uw webmaster voor een controle.
Raadpleeg ook de officiële PHP-documentatie voor de functie fgetcsv().
Maak het uzelf gemakkelijk! Indien nodig kunnen lokale en door Infomaniak gecertificeerde partners deze stappen voor u uitvoeren. Start een gratis aanvraag – zij regelen alles en nemen de technische aspecten uit handen.
Link naar deze veelgestelde vragen: https://faq.infomaniak.com/1312
Is deze veelgestelde vragenlijst nuttig geweest?