[RESOLU] LOAD DATA ne s'execute pas

Petit nouveau ! | 9 Messages

17 avr. 2019, 12:00

Bonjour à tous,
Alors voilà j'essaie actuellement de faire rentrer le contenue d'un fichier CSV dans ma base de donnée, donc comme mon fichier est très gros, j'utilise comme vous en doutez "LOAD DATA INFILE"
Mais voilà cette dernière malgré tout les tutos et forums visités ne marche pas... pour être précis elle ne s’exécute pas :
$dossier = 'upload' ;
$rep= $dossier."".$_FILES['fichier']['name'];

 $sql = "LOAD DATA LOCAL INFILE '$rep' 
   INTO TABLE fichier 
   FIELDS TERMINATED BY ','  
   LINES TERMINATED BY '\\r\\n' 
   IGNORE 1 LINES
 	(@id_seq, @seq, @locus, @stop_codon, @vj_in_frame, @productive, @rev_comp, @v_call, @d_call,@j_call) 
 	set 
 		id_seq=@id_seq, 
 		seq=@seq, 
 		locus=@locus, 
 		stop_codon=@stop_codon, 
 		vj_in_frame=@vj_in_frame,        
 		productive=@productive, 
 		rev_comp=@rev_comp, 
 		v_call=@v_call, 
 		d_call=@d_call,
 		j_call=@j_call";
   
          echo "test1" ;    //fonctionne

   $idBase->execute($sql) or die("erreur exec");

        echo "test2" ;    //fonctionne pas
Alors voilà j'ai remarqué que dans mon code tous ce faisait, mais lors de l’exécution, il se stoppé au lieux de d’exécuter la commande LOAD DATA.
Je tiens a préciser que la commande LOAD DATA semble fonctionner, puisque je l'ai essayer sur PHPmyadmin (mais la base de donnée ne se remplit pas, je ne sais pas si c'est normal ou pas).
HA et je suis sous LINUX ...

Petite info complémentaire, le fichier est récupéré via un formulaire, puis après j'ai fais du code pour qu'une copie se créer dans un dossier spécifique (le même que j'appelle avec LOAD DATA.

Donc merci d'avance aux âmes charitables qui m'aideront :D et si j'ai oublié de vous fournir des informations, n’hésitai pas.
Modifié en dernier par sora174 le 17 avr. 2019, 15:10, modifié 1 fois.

Petit nouveau ! | 9 Messages

17 avr. 2019, 14:16

Est ce que ça pourrait venir du chemin vers le fichier qui est pas bon ? Parce que même si je met un chemin d'accès abérant, aucune erreur ne s'affiche..

Petit nouveau ! | 9 Messages

17 avr. 2019, 15:25

Alors j'ai tester avec une autre commande d'execution :
 $req = $idBase->query( "LOAD DATA LOCAL INFILE '$rep' 
	 INTO TABLE fichier 
	 FIELDS TERMINATED BY ','  
	 LINES TERMINATED BY '\\r\\n' 
	 IGNORE 1 LINES
 	(@id_seq, @seq, @locus, @stop_codon, @vj_in_frame, @productive, @rev_comp, @v_call, @d_call,@j_call) 
 	set 
 		id_seq=@id_seq, 
 		seq=@seq, 
 		locus=@locus, 
 		stop_codon=@stop_codon, 
 		vj_in_frame=@vj_in_frame, 
 		productive=@productive, 
 		rev_comp=@rev_comp, 
 		v_call=@v_call, 
 		d_call=@d_call,
 		j_call=@j_call") or die ("haaaaaaa");

              echo "test";      //fonctionne
Donc comme ceci, si le chemin d'accès est bon la commande d’exécution n'est plus bloqué (bonne nouvelle) mais la BDD ne se remplit toujours pas...
Ha d'ailleurs chose bizarre, si le chemin d'accès au fichier est faux, la commande d’exécution se rebloque au lieux d'envoyer le message d'erreur...

EDIT:

Je viens de tester si il y a une différences si je me connecte à ma BDD en procédurale et en PDO(de base je suis en PDO)
Si je me connecte en procédurale, la connexion se fait bien, mais cette fois j'ai mon message d'erreur ("Haaaaaa") qui est envoyé et ceux qu'il y ai une erreur sur le chemin d'accès vers le fichier ou non.

Petit nouveau ! | 9 Messages

17 avr. 2019, 15:59

Personne ? même pas des idées ou une correction sur un pauvre apostrophe qui se serai perdue ? XD

Mammouth du PHP | 1566 Messages

17 avr. 2019, 16:12

si ta table ne se rempli pas en utilisant php my admin, commence par là cherche à faire en sorte que ca marche.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie

Petit nouveau ! | 9 Messages

17 avr. 2019, 16:21

si ta table ne se rempli pas en utilisant php my admin, commence par là cherche à faire en sorte que ca marche.
Donc c'est bien pas normal, merci du conseil, je m'y atèle !

Petit nouveau ! | 9 Messages

17 avr. 2019, 17:13

si ta table ne se rempli pas en utilisant php my admin, commence par là cherche à faire en sorte que ca marche.
Bon j'ai essayer mais même avec phpmyadmin ça marche pas, mais j'ai trouvé quelque choses d'encore plus bizarre:

A un moment je me suis dit "tiens si j'essayais d'utiliser la fonction import intégré à phpmyadmin".

Alors au début j'ai importer mon fichier en CSV normal , ça c'est très bien passé, mais quand j'ai voulu spécifié qu'il devait l'importer en CSV LOAD DATA, la commande automatique se fait bien mais ça ne remplis pas la base de donnée, comme si le fichier était vide alors que ce n'est pas le cas..

Mammouth du PHP | 1566 Messages

18 avr. 2019, 07:58

vérifie les droits d'accés de l'utilisateur de la database, et si tu es en mutualisé vérifie que tu as le droits d'utiliser load data
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie

Petit nouveau ! | 9 Messages

18 avr. 2019, 10:00

Bon l'importation automatique de phpmyadmin marche (je l'ai mis à jour) mais ça marche toujours pas quand je tape la commande alors que je prend celle qu'il donne lors de l’importation de fichier avec LOAD DATA, j'ai juste changer le chemin d'accès au fichier...

On est d'accord que si j'ai j'ai mon fichier.csv dans le dossier Documents je dois faire /home/monprofil/Documents/fichier.csv
non ? par ce que que là je commence à douter

Petit nouveau ! | 9 Messages

18 avr. 2019, 11:29

Ca va me rendre foue, la commande marche sur mySQL mais sur phpmyadmin ni sur php :tir2: :boire4: |*() :axe:

Petit nouveau ! | 9 Messages

18 avr. 2019, 13:43

Bon j'ai résolue mon problème ... je ne sais pas trop comment, ais si sa peu aider je vais détailler ce que j'ai fait :
-J'ai mis Phpmyadmin à la dernière version disponible
-je suis aller sur l'interpréteur mysql (au cas où que c'était un problème de droit) :
* mysql -u root -p -D mysql UPDATE user SET File_priv = 'Y' WHERE User = 'XXXXX' (And Host = 'localhost');
*FLUSH PRIVILEGES;
* mysql.exe --local-infile=true --user=USER --password=MDP BDD ;
-appel de la BBD avec PDO en accordant l'accès à LOAD DATA :
try
{
	$idBase = new PDO('mysql:host='.HOST.';dbname='.stagephp.';charset=utf8', USER, MDP, 
	array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
			PDO::MYSQL_ATTR_LOCAL_INFILE => 1));
	
}
catch (Exception $e)
{
	die('Erreur : ' . $e->getMessage());
}
-LOAD DATA:
 $idBase->query("LOAD DATA LOCAL INFILE '/home/XXXX/XXXXXXX/test.csv'			 
	 IGNORE INTO TABLE fichier 
	 	FIELDS TERMINATED BY '\t'
	 	LINES TERMINATED BY '\n' 
		IGNORE 1 LINES 
		(id_seq, seq, locus, stop_codon, vj_in_frame, productive, rev_comp, v_call, d_call,j_call) ") or die ("nope");
Je sais pas vraiment ce qui à débloqué le tout parce que pendant mais test j’avais rajouté une option à la c** pour LOAD DATA et quand je l'ai remis comme au début, plus d'erreur...

EN tout cas merci pour le soutient et j'espère que sa pourra aider des gens :p