Onylink
Messages postés2Date d'inscriptionmardi 24 mars 2009StatutMembreDernière intervention14 juillet 2009
-
14 juil. 2009 à 12:23
Bonjour,
J'ai un problème pour utiliser la méthode LOAD DATA, qui prend en fichier type CSV et le découpe et rentre automatiquement dans la BDD (mySQL 5).
En faite je pense que le problème vient plus du fait qu'on ne doit pas récupérer comme il faut l'adresse mémoire du fichier CSV.
Quand je test dans ma page web avec un fichier que j'ai sur mon pc, celà marche. (script si dessous)
<?php
(connection à la bdd)
mysql_query("LOAD DATA INFILE '../../../www/fichier.csv'INTO TABLE test FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;");
?>
Par contre quand j'importe le fichier à partir d'un formulaire ça ne marche plus. J'ai fait des tests sur l'adresse mémoire du fichier. Je trouve le dossier Temp, mais je n'arrive pas (à priori) à lui passé correctement en paramètre.
Pour importer le fichier j'utilise le langage html. En spécifiant bien qu'il s'agit d'un fichier.
<formenctype="multipart/form-data" action="enter_DB_test.php" method="post" >
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
Envoyez ce fichier :<inputname="file" type="file" />
<inputtype="submit" value="Envoyer le fichier" />
Ensuite je le récupère dans une autre page, ou je test en premier lieu la lecture puis j'affiche le contenu..
<?php
(connection à la bdd)
Je vérifie si le fichier existe
if (isset($_FILES['file'])) {
$file = $_FILES['file']['tmp_name'];
Je parcours le fichier pour en afficher le contenu (tout cette opération marche bien)
$handle = fopen($file,'r');
$row = 1;
$handle = fopen("$file", "r");
while (($data = fgetcsv($handle, 4096, ";")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
Ici plutot que d'utiliser un INSERT INTO j'essai de passer en paramètre le fichier CSV à la méthode LOAD DATA.
mysql_query( "LOAD DATA INFILE '$file' INTO TABLE test FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;" );
}
?>
Mais il ne se passe rien.. Je n'ai pas de retour d'erreur où quoi que ce soit d'autre.. Donc je ne sais plus ou faire les controles.
Si quelqu'un peut m'aider ça serai magique. Vu que je bloque dessus depuis une semaine.
Si je n'utilise pas la méthode INSERT INTO c'est car elle est moins "généraliste" et moins rapide.