Bonjour,
Après moult recherches, je n'ai pas trouvé de réponse à mon problème, alors je me permets de créer un nouveau sujet !

Voici ce que je voudrais faire :
J'ai un fichier .txt (pour l'instant c'est un fichier de test, à l'avenir ce sera sûrement un .csv) avec 3 lignes de lettres et une ligne à la fin.
Je voudrais importer son contenu dans ma base de données.

Au départ j'étais parti sur une ouverture/lecture de fichier en php puis une requête sql, et ne trouvant pas de solution j'ai essayé une autre méthode (que j'ai glané sur le net).

Voici donc mon code :
<?php
$cnx = mysqli_connect('localhost', 'root', '', 'stage_jda') or die("Erreur de connexion au serveur.");
LOAD DATA [LOCAL] INFILE 'fichier.txt'
INTO TABLE taxe_d_apprentissage
?>


A l'execution de ma page, j'ai une erreur php :
Parse error: syntax error, unexpected 'DATA' (T_STRING)

Je me suis bien sur documenté sur cette erreur mais rien à faire, pas trouvé de solution Smiley ohwell

Si quelqu'un pourrait me dépanner Smiley lol
Bonjour kustolovic, j'ai lu ton lien, et les exemples sont typiquement les mêmes que les miens si je ne m'abuse : une ligne de connexion à la bdd suivi d'une requête le tout entouré de balise php... Je ne vois pas pourquoi cela rendrait dans mon cas mon fichier invalide ?

Mais peut-être ai-je mal compris Smiley biggol
Modérateur
dans les exemples il y a ça par exemple:

<?php
$resultat = mysqli_query($bdd, 'SELECT * FROM membres LIMIT 0, 10');
?>

et toi tu fais:
<?php
SELECT * FROM membres LIMIT 0, 10
?>
Modérateur
Dans ton cas ça donnerait quelque chose du genre:


$cnx = mysqli_connect('localhost', 'root', '', 'stage_jda') or die("Erreur de connexion au serveur.");
$resultat = mysqli_query($cnx, "LOAD DATA [LOCAL] INFILE 'fichier.txt' INTO TABLE taxe_d_apprentissage");

Ah oui en effet, j'avais zappé une partie complète du code en faite ! Le pire c'est que je n'en suis pas a ma première requête sql en php Smiley sweatdrop

Du coup avec ta soluce je n'ai plus d'erreur mais rien n'est enregistré non plus dans ma table Smiley eyecrazy

EDIT: J'ai essayé d'enlever les crochet à "[LOCAL]" et du coup j'ai bien 3 nouveaux enregistrements dans ma table, mais vide... Je me penche sur cela maintenant.

EDIT 2: ça à l'air de passer en indiquant le nom de mes colonnes. Je vais tester sur un plus gros fichier, plus complet pour voir.
Modifié par Hematie (19 Jun 2017 - 13:58)
Modérateur
Hematie a écrit :

EDIT 2: ça à l'air de passer en indiquant le nom de mes colonnes. Je vais tester sur un plus gros fichier, plus complet pour voir.


Heureux pour toi, pour la query en elle-même je n'ai jamais essayé «LOAD DATA INFILE» et ne peux pas t'aider. bonne chance!
Salut,

Je ne connaissais pas non plus cette requête SQL. Intéressant Smiley smile

Sinon pour les fichiers csv, j'utilises quelque chose comme ça (j'ai toute une classe dédiée donc je t'ai sorti un morceau de code pour que tu vois le principe) :
define('UPDATE_FILES_DIR'    , '../update/copy/');
define('UPDATE_CSV_EXT'      , '.csv');
define('UPDATE_CSV_LENGTH'   , '2048');
define('UPDATE_CSV_DELIMITER', ';');
define('UPDATE_CSV_ENCLOSURE', '"');
define('UPDATE_CSV_ESCAPE'   , '\');

//$csv contient le nom du fichier csv à lire, sans l'extension .csv
function update($csv){
  $fileURI = UPDATE_FILES_DIR . $csv . UPDATE_CSV_EXT;

  $fh = fopen($fileURI, 'r');

  while($row = fgetcsv($fh, UPDATE_CSV_LENGTH, UPDATE_CSV_DELIMITER, UPDATE_CSV_ENCLOSURE)){
    //Ici $row est un array. Chaque valeur correspond à une colonne. Par exemple, $row[2] contient la valeur de la 3ème colonne
    //Tu peux ensuite traiter et insérer ces valeurs dans une base de donnée
  }

  fclose($fh);
}
Merci pour vos réponses ! Elles m'ont bien aidé. Cela fonctionne bien désormais Smiley smile

Je marque le sujet comme résolu Smiley biggrin