Page 1 sur 3

PLEASE HELP: Importer des données CSV dans une base SQL

Posté : 06 déc. 2010, 23:57
par niko94100
Bonsoir à tous,

Mon petit projet est quasiment à son terme !!!!
Oufffff finalement en ayant compris la logique ça va très vite !!!
je suis encore débutant bien sur et au tout début MAIS tous les jours j'apprends !!!

Il ne manque qu'une seule chose:

Alimenter ma base de données principale sans passer par phpmyadmin.

Pour cela j'ai un fichier .CSV avec | comme séparateur (attention le fichier peut contenir des " ou des /)

Le fichier est complet mais évolue en gros je peux vider ma table qui s'appelle licences et ensuite réimporter la totalité du fichier licencies.csv
Ces deux noms ne bougeront pas.

Eventuellement si quelqu'un pouvait me montrer un code très simple qui permet de m'ouvrir une boîte de dialogue pour allez chercher le fichier à ouvrir, puis vidage de base licences et enfin remplissage....

Car là je sèche ....

Merci d'avance les amis ;)

Re: Importer des données CSV dans une base SQL

Posté : 07 déc. 2010, 00:05
par moogli
salut,

stealth35 à fait exactement ce qu'il te faut => vos-contributions/manipuler-simplement- ... 55918.html il te reste à changer sqlite par mysql et le tour est jouer :)

@+

Re: Importer des données CSV dans une base SQL

Posté : 07 déc. 2010, 00:41
par niko94100
Alors voilà mon code ....mais ça ne marche pas ....

<?php

try 
{
    $dbh = new PDO('mysql::memory:');
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(PDOException $e)
{
    exit($e->getMessage());
}    

$file = new SplFileObject('licencies.ffn');
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
$file->setCsvControl('|');

//je veux vider ma table puis la remplir avec le fichier licencies.ffn qui est un fichier csv avec barre verticale en séparateurs licences est le nom de ma table déjà crée
$dbh->exec("TRUNCATE TABLE licences");
$stmt = $dbh->prepare("INSERT INTO licences");    

foreach($file as $row)
{
    $stmt->execute($row);
}


?>
Voilà mon code ....

Re: Importer des données CSV dans une base SQL

Posté : 07 déc. 2010, 00:43
par moogli
je te conseil les tuto sur pdo comme http://www.siteduzero.com/tutoriel-3-34 ... x-bdd.html

ou vire la partie pdo et utilise les mysql_*

@+

Re: Importer des données CSV dans une base SQL

Posté : 07 déc. 2010, 00:46
par stealth35
Alors voilà mon code ....mais ça ne marche pas ....

<?php

try 
{
    $dbh = new PDO('mysql::memory:');
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(PDOException $e)
{
    exit($e->getMessage());
}    

$file = new SplFileObject('licencies.ffn');
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
$file->setCsvControl('|');

//je veux vider ma table puis la remplir avec le fichier licencies.ffn qui est un fichier csv avec barre verticale en séparateurs licences est le nom de ma table déjà crée
$dbh->exec("TRUNCATE TABLE licences");
$stmt = $dbh->prepare("INSERT INTO licences");    

foreach($file as $row)
{
    $stmt->execute($row);
}


?>
Voilà mon code ....
t'attend quoi de : INSERT INTO licences ?
sinon :memory: est propre a sqlite, pour te connecter a mysql c'est par ici : http://www.php.net/manual/fr/ref.pdo-my ... ection.php
mais t'as du avoir une erreur des la connexion qui aurai pu te donner un indice :wink:

Re: Importer des données CSV dans une base SQL

Posté : 07 déc. 2010, 00:57
par niko94100
Oh le boulet ...
mysql_connect("localhost", "root", "root");
mysql_select_db("test"); 
Mon INSERT est la pour reprendre les données du CSV pour les insérer dans ma base .... j'ai pas mis values car je veux importer tous les champs dans licences ... j'ai faux ??? lol

Re: Importer des données CSV dans une base SQL

Posté : 07 déc. 2010, 00:59
par stealth35
Oh le boulet ...
mysql_connect("localhost", "root", "root");
mysql_select_db("test"); 
Mon INSERT est la pour reprendre les données du CSV pour les insérer dans ma base .... j'ai pas mis values car je veux importer tous les champs dans licences ... j'ai faux ??? lol
ouai :wink:
par contre si tu fais avec mysql_* va falloir un peu plus adapter

Re: Importer des données CSV dans une base SQL

Posté : 07 déc. 2010, 01:04
par niko94100
Bah justement c'est l'adaptation que j'aimerais connaître lol .... et la je sèche complétement

Re: Importer des données CSV dans une base SQL

Posté : 07 déc. 2010, 01:04
par stealth35
Bah justement c'est l'adaptation que j'aimerais connaître lol .... et la je sèche complétement
pourquoi t'as pas PDO ?

Re: Importer des données CSV dans une base SQL

Posté : 07 déc. 2010, 01:08
par niko94100
euh honnêtement ton PDO je ne sais même pas ce que c'est lol j'ai commencé à coder à l'arrache un truc à l'arrache mais qui marche .... lol

Re: Importer des données CSV dans une base SQL

Posté : 07 déc. 2010, 01:10
par stealth35
euh honnêtement ton PDO je ne sais même pas ce que c'est lol j'ai commencé à coder à l'arrache un truc à l'arrache mais qui marche .... lol
regarde dans ton phpinfo (voir si y'a pdo_mysql)

Re: Importer des données CSV dans une base SQL

Posté : 07 déc. 2010, 01:12
par niko94100
Oui j'ai

Re: Importer des données CSV dans une base SQL

Posté : 07 déc. 2010, 01:13
par stealth35
Oui j'ai
donc pour te connecté c'est
$dbh = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', 'root');

Re: Importer des données CSV dans une base SQL

Posté : 07 déc. 2010, 01:18
par niko94100
Hummmm toujours rien ....

<?php

$dbh = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', 'root');

$file = new SplFileObject('licencies.ffn');
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
$file->setCsvControl('|');


$dbh->exec("TRUNCATE TABLE licences");
$stmt = $dbh->prepare("INSERT INTO licences");

foreach($file as $row)
{
$stmt->execute($row);
}


?>

Re: Importer des données CSV dans une base SQL

Posté : 07 déc. 2010, 01:21
par stealth35
normale ta requete elle fais rien
INSERT INTO licences