PHP: esportare in formato CSV una tabella di MySql
17/04/2013Oltre al classico back up del database, che restituisce il formato SQL di struttura e dati, script illustrato qui, può esser necessaria una esportazione della tabella di MySql in un formato utile all'analisi e all'elaborazione dei dati con i classici fogli elettronici quali ad esempio Excel.
Realizzare uno script del genere non è difficile, ecco un esempio di codice con cui esporto un CSV che avrà cone nome file quello della tabella con data dell'operazione. Da notare come nel ciclo della funzione vi sia una riga di esempio su come fare per impostare le intestazioni di colonna in modo che sia sostituito il nome del campo della tabella con una etichetta più comprensibile (nell'esempio la colonna che nel db è chiamata 'mail' nel csv risulterà essere 'posta elettronica'). Sarà quindi necessario aggiungere tutti i casi in cui si vuol modificare l'intestazione di colonna.
Ecco il codice:
$host = 'localhost';
$user = 'nomeutentedb';
$pass = 'passwordutentedb';
$db = 'nomedb';
$link = mysql_connect($host, $user, $pass) or die("Connessione MySql non riuscita " . mysql_error());
mysql_select_db($db) or die("Apertura DB fallita");
$q = "SELECT nomecampo1, nomecampo2, nomecampo3, nomecampo4 from nometabella order by id DESC ";
$result = mysql_query($q, $link) or die(mysql_error($conn));
header("Content-Type: text/csv");
header("Content-Disposition: attachment;filename=nometabella_" . date("d-m-Y") . ".csv");
$row = mysql_fetch_assoc($result);
if ($row) {
echocsv(array_keys($row));
}
while ($row) {
echocsv($row);
$row = mysql_fetch_assoc($result);
}
function echocsv($fields)
{
$separator = '';
foreach ($fields as $field) {
$field = strip_tags($field);
if ($field == 'mail') $field = 'posta elettronica';
$field = html_entity_decode($field, ENT_QUOTES, 'ISO-8859-1');
if (preg_match('/\\r|\\n|,|"/', $field)) {
$field = '"' . str_replace('"', '""', $field) . '"';
}
echo $separator . $field;
$separator = ';';
}
echo "\r\n";
}