insertion de données csv dans la base par un script

Répondre
i M@N
le 25/02/2004 à 11:03
i M@N
Hello !

J'ai un souci avec un script que j'essaye de faire fonctionner et qui est censé insérer dans ma base des données présentes dans un fichier.csv (comma separated values).

Voilà la structure de ma table csv :

CREATE TABLE `csv` (
`id` int(5) NOT NULL default '0',
`label` varchar(40) NOT NULL default '',
`artiste` varchar(40) NOT NULL default '',
`titre` varchar(40) NOT NULL default '',
UNIQUE KEY `id` (`id`)
) TYPE=MyISAM;

Voila le contenu du fichier file.csv :

"1";"label1";"artiste1";"titre1"
"2";"label2";"artiste2";"titre2"
"3";"label3";"artiste3";"titre3"
"4";"label4";"artiste4";"titre4"
"5";"label5";"artiste5";"titre5"

Voila mon script :

<?

$base = mysql_connect ('localhost', 'root', '***');
mysql_select_db ('test', $base) ;

// Préparation de la requête de suppression
$sql = 'DELETE * FROM csv';

// on exécute la requête
$result = mysql_query($sql);

$handle = fopen ("./file.csv","r");
fgetcsv ($handle, 1000, ",");
while ($data = fgetcsv ($handle, 1000, ",")) {

print $data[0] . "\n";
mysql_query("INSERT INTO csv (id,label,artiste,titre) VALUES ('".$data[0]."')");
printf (" - le dernier enregistrement a pour id %d\n", mysql_insert_id());
echo "\n";
echo "\n";
//ce qui est echo c'est juste pour savoir que le script fonctionne...
}
fclose ($handle);

// on ferme la connexion à la base de données.
mysql_close ();

?>

Quand je lance le script, il affiche ça :

2 - le dernier enregistrement a pour id 0
3 - le dernier enregistrement a pour id 0
4 - le dernier enregistrement a pour id 0
5 - le dernier enregistrement a pour id 0

Non seulement il n'affiche rien pour l'id 1, mais en plus il n'insère rien dans ma base.

Quelqu'un sait pourquoi ?

@+...
One Love, One Heart, One Unity.
LA GLOBULE
le 25/02/2004 à 11:09
LA GLOBULE
Pour le id qui vaut toujours 0, c'est facile, ta table csv n'a pas d'id auto_increment.

Et pour la table vide, faudrait echo ta requete SQL ou mettre un or die dessus pour voir les erreurs retournés (si il y en a).
i M@N
le 25/02/2004 à 11:42
i M@N
Reuh ...

Merci LA_GLOBULE.

Bon j'ai modifié le script avec le echo $sql pour la requête et j'ai compris l'erreur.

<?

// ... bla bla ...

$handle = fopen ("./file.csv","r");
fgetcsv ($handle, 1000, ",");
while ($data = fgetcsv ($handle, 1000, ",")) {

print $data[0] . "\n";

// Préparation de la requête d'insertion
$sql = "INSERT INTO csv VALUES (".$data[0].")";

echo $sql;

// on exécute la requête
$result = mysql_query($sql);

// mysql_query("INSERT INTO csv (id,label,artiste,titre) VALUES ('".$data[0]."')");

printf (" - le dernier enregistrement a pour id %d\n", mysql_insert_id());
echo "\n";
echo "\n";
//ce qui est echo c'est juste pour savoir que le script fonctionne...
}
fclose ($handle);

// on ferme la connexion à la base de données.
mysql_close ();

?>

Mais j'ai toujours le problème pour mon premier enregistrement qui ne se fait pas voilà ce que donne l'echo de la requête (echo $sql;) :

'2','label2','artiste2','titre2' INSERT INTO csv VALUES ('2','label2','artiste2','titre2') - le dernier enregistrement a pour id 0
'3','label3','artiste3','titre3' INSERT INTO csv VALUES ('3','label3','artiste3','titre3') - le dernier enregistrement a pour id 0
'4','label4','artiste4','titre4' INSERT INTO csv VALUES ('4','label4','artiste4','titre4') - le dernier enregistrement a pour id 0
'5','label5','artiste5','titre5' INSERT INTO csv VALUES ('5','label5','artiste5','titre5') - le dernier enregistrement a pour id 0

Les données insérées commencent à la deuxime ligne de mon fichier file.csv :

"'1','label1','artiste1','titre1'"
"'2','label2','artiste2','titre2'"
"'3','label3','artiste3','titre3'"
"'4','label4','artiste4','titre4'"
"'5','label5','artiste5','titre5'"

J'ai essayé l'auto increment, ça donne kedal ...

Pourquoi il prend pas la première ligne de mon fichier.csv ??

@+...
One Love, One Heart, One Unity.
i M@N
le 25/02/2004 à 11:48
i M@N
Reuh ...

Oh pitin !

C'est koi ces gonzes qui font des scripts n'importe nawak et qui balancent ça sur le net ?

Le problème venait de :

fgetcsv ($handle, 1000, ",");

En fait c'est fgetcsv ($handle, 0, ",");

Je pense que comme ça la lecture du fichier.csv commence à l'octet 0 ou un truc du genre ...

Merci LA_GLOBULE.

@+...
One Love, One Heart, One Unity.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours