1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| <?php
$fichier = 'test.csv';// Fichier cible csv
$separateur = ';';// Point virgule si csv français
$table_temp = 'test_csv'; // Nom que l'on veut donner à la table temporaire (peu importe)
// Ouverture de sqlite en mémoire
try
{
$dbh = new PDO("sqlite::memory:");
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(PDOException $e)
{
exit($e->getMessage());
}
// Chargement du fichier csv
$file = new SplFileObject($fichier);
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
$file->setCsvControl($separateur);
/* Récupération de la première ligne du tableau pour créer la table, les colonnes, et la requête préparée d'insertion.
(suppose que la première ligne du csv indique les noms des colonnes sinon il faudra les indiquer à la place de $champs_sqlite dans CREATE TABLE $table_temp ($champs_sqlite) */
$tab_champs = $file->current();
$champs_sqlite = implode(',',$tab_champs);
$champs_insert = array_fill(0,count($tab_champs),'?');
$champs_insert = implode(',',$champs_insert);
// Création de la table
$dbh->exec("CREATE TABLE $table_temp ($champs_sqlite)");
// Préparation de la requête
$stmt = $dbh->prepare("INSERT INTO $table_temp VALUES ($champs_insert)");
// On passe la première ligne du csv (si elle correspond à la description des colonnes)
$file->next();
// Insertion des données csv dans la table
while($row = $file->current())
{
$stmt->execute($row);
$file->next();
}
/* On peut maintenant utiliser les fonctions mysql pour trier les résultats (ci-dessous je les affiche simplement. Attention si le csv est important car l'affichage de beaucoup de lignes risque de faire ramer l'ordi)*/
// Pour affichage des champs
print_r($tab_champs);
$query = $dbh->query("SELECT * FROM $table_temp");
echo '<table>';
while($row = $query->fetch(PDO::FETCH_ASSOC))
{
echo '<tr><td>' . implode('</td><td>', $row) . '</td></tr>';
}
echo '</table>';
?> |
Partager