par
moogli » 10 juin 2015, 23:31
salut,
voici un exemple fonctionnel de ce que tu veux.
c'est basé sur une base sqlite en mémoire pour le test, il te suffit de changer la connexion pour utiliser ton sgbd.
L'accès au SGBD est fait avec PDO, et l'insertion utilise une requête préparée (c'est fait pour ça

).
<?php
//titre,debut,ville,url,fin,fin,heure
//0 , 1 , 2 3, 4, 5, 6
// code de création de la table pour le test
$create = <<<create
create table loisir (
titre varchar, date_debut varchar, date_fin varchar, heure varchar, codepostal varchar, ville varchar, url_type varchar
);
create;
// la requête insert
$insert = 'insert into loisir (titre, date_debut, date_fin, heure, codepostal, ville, url_type) values (:titre, :date_debut, :date_fin, :heure, :codepostal, :ville, :url_type)';
try {
// instance de PDO, ici un base sqlite memory, à toi de voir pour ton sgbd
$pdo = new PDO('sqlite::memory:', null, null, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]);
//création de la table en mémoire
$pdo->exec($create);
// préparation de la requête inserte
$stmt = $pdo->prepare($insert);
// accès au fichier csv
$file = new SplFileObject("test.csv");
// parcourt du fichier
while (!$file->eof()) {
// on récupère la ligne courante sous forme csv
$csv = $file->fgetcsv();
// bind sur la marqueur correspondant
$stmt->bindParam(':titre', $csv[0]);
$stmt->bindParam(':date_debut', $csv[1]);
$stmt->bindParam(':date_fin', $csv[4]);
$stmt->bindParam(':heure', $csv[5]);
// je récupère les infos dnas le champ
list($cp, $ville, $pays) = explode('|', $csv[2], 3);
$stmt->bindParam(':codepostal', $cp);
$stmt->bindParam(':ville', $ville);
$stmt->bindParam(':url_type', $csv[3]);
// insertion en base
$stmt->execute();
}
// fermeture de la requête préparée
$stmt->closeCursor();
// vérification (pour voir si le test fonctionne
$datas = $pdo->query('select * from loisir');
while ($data = $datas->fetch(PDO::FETCH_ASSOC)) {
var_dump($data);
}
$datas->closeCursor(); // fermeture du curseur
} catch (Exception $e) {
var_dump($e);
}
@+
salut,
voici un exemple fonctionnel de ce que tu veux.
c'est basé sur une base sqlite en mémoire pour le test, il te suffit de changer la connexion pour utiliser ton sgbd.
L'accès au SGBD est fait avec PDO, et l'insertion utilise une requête préparée (c'est fait pour ça ;)).
[php]<?php
//titre,debut,ville,url,fin,fin,heure
//0 , 1 , 2 3, 4, 5, 6
// code de création de la table pour le test
$create = <<<create
create table loisir (
titre varchar, date_debut varchar, date_fin varchar, heure varchar, codepostal varchar, ville varchar, url_type varchar
);
create;
// la requête insert
$insert = 'insert into loisir (titre, date_debut, date_fin, heure, codepostal, ville, url_type) values (:titre, :date_debut, :date_fin, :heure, :codepostal, :ville, :url_type)';
try {
// instance de PDO, ici un base sqlite memory, à toi de voir pour ton sgbd
$pdo = new PDO('sqlite::memory:', null, null, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]);
//création de la table en mémoire
$pdo->exec($create);
// préparation de la requête inserte
$stmt = $pdo->prepare($insert);
// accès au fichier csv
$file = new SplFileObject("test.csv");
// parcourt du fichier
while (!$file->eof()) {
// on récupère la ligne courante sous forme csv
$csv = $file->fgetcsv();
// bind sur la marqueur correspondant
$stmt->bindParam(':titre', $csv[0]);
$stmt->bindParam(':date_debut', $csv[1]);
$stmt->bindParam(':date_fin', $csv[4]);
$stmt->bindParam(':heure', $csv[5]);
// je récupère les infos dnas le champ
list($cp, $ville, $pays) = explode('|', $csv[2], 3);
$stmt->bindParam(':codepostal', $cp);
$stmt->bindParam(':ville', $ville);
$stmt->bindParam(':url_type', $csv[3]);
// insertion en base
$stmt->execute();
}
// fermeture de la requête préparée
$stmt->closeCursor();
// vérification (pour voir si le test fonctionne
$datas = $pdo->query('select * from loisir');
while ($data = $datas->fetch(PDO::FETCH_ASSOC)) {
var_dump($data);
}
$datas->closeCursor(); // fermeture du curseur
} catch (Exception $e) {
var_dump($e);
}[/php]
@+