Télécharger le zip
Une simple requête sql "load data infile" fait la même chose que "import_requete.php", avec des temps d'éxécution sans commune mesure.Un exemple ici pour un fichier d'environ 45000 lignes :http://www.phpcs.com/code.aspx?id=13434
j ai regarde ton lien....il fait la meme chose sauf que je fe des test sur ce que l on insere dans la base pour eviter doublon suivant certains champs....Concernant le temps requis, ca depend du nombre de ligne et si toutes les cases sont remplies...Neanmoins, merci pour le commentaire...Xabi
Ce n'est pas la source du code que je voulais te faire voir, mais mon commentaire :les lignes d'importation pourraient avantageusement être remplacée par cette requète : $sql = "LOAD DATA INFILE '$filename' " . "INTO TABLE kill_country " . "FIELDS TERMINATED BY ',' " . "LINES TERMINATED BY ' '";Testé sur serveur PIII 500fichier : ip-to-country.csv45 000 enreg. et 5 champstemps d'éxécution : la fonction du code : 47 à 48 secondes la requète : 0.5 à 0.6 secondeet principalement la différence de temps d'éxécution entre une fonction comme la tienne et la requête : le rapport est de presque 1 à 100.
Ok j avais pas capté mais le souci est que c est pas vraiment applicable dans mon cas car ca voudrait dire que j inserer tout le fichier dans ma base....et c est que je veux faire mais en verifiant que les donnees du fichier ne peuvent faire doublon avec ma base.En consequent, pas applicable a mon cas....
C'est tout à fait applicable :Tu déclares comme clé unique les colonnes de la table dans lesquelles tu ne veux pas de doublons.Et tu modifie la requête : $sql = "LOAD DATA INFILE '$filename' " . "REPLACE " . "INTO TABLE laTable " . "FIELDS TERMINATED BY ',' " . "LINES TERMINATED BY ' '";Avec "replace", l'enreg. qui arrive remplace celui qui existe déjà avec la même clé.
J ai mis la clef sur 3 champs mais ca marche pas du tout avec ta requete...ca me fait une erreur de requete a chaque fois...
ben c est la justement le truc....c est que je ne veux pas "remplace" l 'enregistrement qui a la meme cle dans ma base....
ma source ne correspond plus vraiment a ce que je fais....a l epoque, je remplacais si il y avait doublon, a presnt, s il y a un doublon...je le dis a l user mais je ne le change pas dans la base, je lui indique l enregistrement dans la base qui empechait son enregistrement.
Bonjour,CE code a l'air très bien, mais j'ai un soucis dans son utilisation. Peut-être du fait que je suis un brin débutant en php..J'utilise sur fichier .csv de 3 entrées.Il m'enregistre bien 3 entrées dans ma table, mais ces 3 entrées contiennent des champs vides (hormis l'id qui s'autoincrémente...)Auriez-vous une idée de l'origine de ce problème? Moi je cale...MErciJulien
Tout d abord, verifies bien que les parametres du fichier connexion soient bien reglés. Ensuite si tu as changé des noms de variables dans le fichier "import_requete", verifies les une nouvelle fois.tiens mois au courant.Xabi
SAlut,Les paramétres de connexion sont bien réglés. La preuve en est qu'il y a bien des entrées qui sont ajoutées dans la base (le bon nombre, mais vide... à part id autoincrémenter....).Pour ce qui concerne le fichier "import_requete", j'ai simplement modifié la requête sql :$query = "INSERT INTO bdd (champs1,champs2,champs3) VALUES('','$champ2','$champ3')"; en$query ="INSERT INTO test (id,nom,lieu) VALUES('','$champ2','$champ3')"id, nom et lieu étant les champs de ma table test...Qu'en penses-tu?
deja, il y avait une erreur dans le code, remplaces ceci:$liste[1] = ( isset($liste[2]) ) ? $liste[1] : Null;par cela:$liste[1] = ( isset($liste[1]) ) ? $liste[1] : Null;Normalement, le code fonctionne, je te conseille tout d abord de faire de echo des liste[] puis des echos de tes variables comme ca, tu verras deja si elles sont vides des le depart ou perdues en route.
J'ai réussi à régler le problème en faisant des echos...Il y avait simplement quelques erreurs de chiffres dans le code en plus de celle que tu m'as dite.J'ai néanmoins encore une question.J'aimerais faire un formulaire de saisie sous excel. Ainsi je voudrais mettre le nom des champs dans la première ligne. Comment pourrais-je procéder pour sauter la première ligne du fichier .csv?MErciJulien
Faire un formulaire de saisie sous excel??? va falloir employer des macro VBA.Pour le nom de tes champs, tu peux sauter une ligne avec "/n" , et lire apres donc....
Bonsoir,Je ne vois pas comment intégrer "/n" au code...Vous pourriez m'éclaircir?Je veux simplemnt sauter la première ligne du fichier .csvMerciJulien
Il y a une erreur dans ton code, insert into ... champs2 et 3 non pas de "s".j'avais besoin de la première colone dans mon tableau en rajoutant : $liste[0] = ( isset($liste[0]) ) ? $liste[0] : Null;Nikel sinon!Merci
Bonjour/soirest ce que vous parvenez a inserer un fichier ou il y a des champs vides ? Dans mon fichier j ai 11 champs et une 20aines de lignes. Les champs 1 à 6 sont remplis , le 7,8,9,10 sont vides, le 11 est remplis.En utilisant ce script, j insere dans ma base uniquement 7 lignes (au lieu des 20) et pas non plus mon 11eme champs...Que dois je faire? Merci de votre precieuse aide.
salut!j'aimerais commencer l'importation qu'a partir de la 5e ligne de mon fichier csv. comment faire?et est ce que ce script est adapte pr des fichiers de plus de 450000 lignes a enregistrer ds la BD?merci bcp!
Salut!j'aimerais que l'enregistrement dans la base commence a partir de la 5e ligne de mon fichier csv. comment faire?et est ce que ce script est adapte pour des fichiers de plus de 45000 lignes?merci bcp!
salut candice....je pense que ca va prendre du temps de traiter 45000lignes ms bon, ca devrait aller....sinon pour ton souci de la 5 eme ligne, tu pourrais faire un compteur et une fois q la variable est a 5, tu commences les enregistrements le tout grace a une commande "while"....enfin, faut tester.Ciao et bonne continuation
Bonjour,je débute en php j 'ai déjà essayé quelques sripts ( news mots passes) ,mais celui ci je n'y arrive pas.J ai mis le script sur multimania j ouvre "entrer_fichier.php" puis "Importation Réussie""ERREUR DE REQUETE SUR LA BASE. " les 2 messages obtenus.avant sur le serveur j 'ai créé une base avec 3 champs J'ai aussi configuré "connexion.php" mais j'hésite pour cette ligne "$hostname_smoby = "ftp.membres.lycos.fr"; // nom de votre serveur ??Pouvez vous me donner un coup de mainMerci
voila une solution que j'ai mis en ligne, elle a ete testée et elle marche : http://www.commentcamarche.com/forum/affich-3111596-importation-fichier-csv-dans-mysql-phpbon courage
Pour sauter la première ligne, placer le$cpt++;à la fin de la boucleif ($champs0!='')et placer derrière ce dernier une boucleif ($cpt!=0)qui se ferme juste avant le$cpt++;C'est pas compliqué(une meilleure façon existe peut-être) mais ça fera gagner du temps à certains...
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 903 607 membres 163 nouveaux aujourd'hui 16 195 membres club