1000 FAQ, 500 tutorial e video esplicativi. Qui ci sono delle soluzioni!
Risolvere un problema di importazione CSV in una tabella MySQL
Questa guida spiega come risolvere un problema di importazione di file .csv in una tabella MySQL. L'alternativa proposta consiste nel leggere il file CSV riga per riga con PHP e inserire i dati nel database MySQL.
Funzione "load data local infile" disattivata
La funzione "LOAD DATA LOCAL INFILE" consente di importare un file CSV in una tabella MySQL ed è sfortunatamente utilizzata frequentemente dagli hacker per ottenere accesso a determinati siti ospitati su macchine che accettano questa funzione.
Per contrastare gli atti maliziosi e continuare a proteggere, per quanto possibile, i dati dei clienti, Infomaniak ha disattivato la funzione "LOAD DATA LOCAL INFILE". Non sono interessate da questa modifica le persone che importano i propri file CSV (a condizione che non selezionino "CSV via LOAD DATA") tramite phpMyAdmin.
Ecco un'alternativa per continuare a importare dati in formato CSV in una tabella MySQL, un esempio in poche righe di PHP facili da implementare nel vostro script PHP o semplicemente in un nuovo file PHP nella vostra directory /web:
// Il codice sopra viene fornito solo come esempio per comprendere come sostituire questa funzione. Siete liberi di sviluppare il vostro metodo più efficiente per inserire dati.
$NomeFile = "dati.csv";
// Apertura del file CSV per lettura
$manico = fopen($NomeFile, "r");
if ($manico) {
// Suddivisione di ogni riga del file CSV
while (($dati = fgetcsv($manico, 1000, ";", """)) !== FALSE) {
$numero = count($dati)-1;
// Generazione della query SQL
$query = "INSERIRE IN `test` VALORI (";
for ($c=0; $c < $numero; $c++) {
$query .= "'" . mysql_real_escape_string($dati[$c]) ."',";
}
$query .= "'" . mysql_real_escape_string($dati[$numero]) ."')";
// Inserimento della riga nel database MySQL
mysql_query($query, $connessione) or die (mysql_error());
$query = NULL;
}
// Chiusura del file CSV
fclose($manico);
} else {
echo "
Errore: Impossibile aprire il file.
\n";exit(1);
}
?>
Purtroppo, non è possibile indicare esattamente dove nel vostro script queste linee di codice debbano essere aggiunte.
⚠️ Per ulteriore assistenza, contattare un partner o presentare un'offerta — consultare anche il ruolo dell'hosting.
Se l'alternativa proposta presenta problemi quando si inviano più file CSV da leggere e la procedura, ad esempio, si conclude senza restituire alcun messaggio nonostante i punti di gestione dei messaggi nel file PHP, è possibile che le tabelle e i campi utilizzati siano indicizzati male e, in tal caso, contattare anche il vostro webmaster.
Consultare anche la documentazione di PHP su fgetcsv qui: http://php.net/manual/fr/function.fgetcsv.php