In questo semplice e brevissimo post per un Programmatore PHP illustrerò un metodo per effettuare una selezione di dati da un database MySQL e la creazione di un file CSV che spesso viene utilizzato da applicazioni aziendali per l'importazione di dati e la sincronizzazione di database, uno dei casi più comuni ad esempio viene rappresentato dai gestionali di Newsletter offline che possono essere sincronizzati tramite CSV alle liste di indirizzi raccolti sul proprio sito internet.
Un Programmatore PHP potrà dunque con poche righe di codice, ampiamente commentate, generare dei file CSV da utilizzare secondo le esigenze del proprio progetto. Per ampiare la comprensione di questo script, suggerisco la breve lettura delle seguenti funzioni illustrate nel manuale PHP: mysql_list_fields, ob_get_contents, ob_end_clean.
<?php
//Connessione al Database
include("config/connect.inc.php");
//Fine Connessione
//Seleziono la tabella del quale voglio effettuare l'esportazione CSV
$tabella = "esempio";
//Recupero le informazioni relative alla data tabella
$info = mysql_list_fields("database_esempio",$tabella);
//Recupero il numero dei campi estratti dal precedente puntatore
$numCampi = mysql_num_fields($info);
//Creo un array dove inserirò i vari nomi dei campi
$arrayNomi = array();
for ($i=0;$i<$numCampi;$i++) {
$name = mysql_field_name($info,$i);
$arrayNomi[] = "$name";
}
//Concatena tutti i campi valorizzati del db, separandoli con il ;
$clausolaSelect = "select CONCAT_WS(';',". implode(",",$arrayNomi).") ";
$clausolaSelect .= " as VALORI from $tabella order by VALORI";
$info = mysql_query($clausolaSelect) or die(mysql_error());
//Esegue la Stampa di tutti i risultati
while (list($result) = mysql_fetch_array($info)) {
print "$result\n";
}
//Prende l'output e lo associa ad una variabile
$contenuto= ob_get_contents();
//Pulisce il Buffer di Output
ob_end_clean();
//A questo punto creo il file CSV prima associano l'hader e poi stampando il tutto
header("Content-Type: application/text");
header("Content-Disposition: attachment; filename=$tabella.csv");
print $contenuto;
?>