IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Rêquete SQL difficile à expliquer...


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Points : 6
    Points
    6
    Par défaut [SQL] Rêquete SQL difficile à expliquer...
    Bonjour à tous,
    Je vais essayer d'être clair, mais ça va pas être évident

    Voilà j'importe un fichier log dans ma base de donnée (avec la commande LOAD DATA LOCAL INFILE ). Jusqu'ici pas de soucis...

    Le problème c'est que j'ai plusieurs fichiers logs à importer, et j'aimerai que ça se fasses automatiquement.

    J'ai essayer d'intégrer ça dans mon programme en php, mais ça ne marche pas.

    En gros j'aimerai que dans ma commande sql "LOAD DATA LOCAL INFILE ", le chemin soit /var/log/*.log
    Es-ce possible ? par quel moyen ?

    En espérant m'etre fait compris, merci d'avance.

    PS: Pardonnez moi si je me suis trompé de forum

    EDIT: Erf oui trompé de forum

  2. #2
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Essaye d'utiliser la fonction readdir qui va te permettre de lister les fichiers de ton répertoire.
    Tu ne va lister que les .log, et faire une boucle avec ta fonction
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Points : 6
    Points
    6
    Par défaut
    ah yess merci je vois mieux comment faire
    Mais après pour ma requête SQL, comment je peux l'utiliser ? je stocke le nom de fichier dans une variable et je l'integre dans ma requête ?

  4. #4
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    exactement.

    En fait, readdir va te récupérer le nom d'un fichier (donc tu sera dans une boucle pour récupérer le contenu de ton répertoire).

    Ce nomp sera stoqué dans une variable. Il ne te reste plus qu'à effectuer ton opération de stoquage dans ta boucle avec cde nom de fichier
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Points : 6
    Points
    6
    Par défaut
    Oki d'accord merci

    Bon ben il n'y a plus qu'à ....

    Reste dans le coin au cas ou j'ai des problèmes hein ?

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Points : 6
    Points
    6
    Par défaut
    Bien j'ai compris comment marchait cette fonction mais maintenant je ne sais pas comment utiliser la variable dans ma requête SQL ?

  7. #7
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    normalement tu dois avoir un code qui ressemble a cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while($file = readdir($handle)) 
    {
    }
    dans ta boucle il suffit de faire une concatenation du nom du fichier avec ta requete en php cela se fait par le point par exemple cela donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $requete = "LOAD DATA LOCAL INFILE " . $file;
    Tout énigme a une solution ! Tout est question de discipline !

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Bebel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $requete = "LOAD DATA LOCAL INFILE " . $file;
    Ca ne marche pas, ça me met l'erreur ==>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    LOAD DATA LOCAL INFILE .
    You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '.' at line 1

  9. #9
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    Bon cela est pour 2 raisons
    - 1
    je viens de verifier la synthase et c'est
    LOAD DATA INFILE "donnees.txt" INTO TABLE db2.ma_table
    donc le code ressemblerait a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $requete = "LOAD DATA LOCAL INFILE \"" . $file . "\" INTO TABLE matable";
    et aussi, l'instruction readdir, te renvoie les fichiers et les dossiers (y compris '.' et '..' donc apres c'est a toi de tester la valeur de $file, pour savoir si c'est bien un fichier, et si le nom correspond bien a un log.
    Tout énigme a une solution ! Tout est question de discipline !

  10. #10
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Points : 6
    Points
    6
    Par défaut
    En fait quand j'affiche $file, il me renvoie fichier.log
    Donc dans ma requête il faut que j'indique le chemin.

    J'ai testé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = "LOAD DATA LOCAL INFILE \mon\chemin\"" . $file . "\" INTO TABLE matable";
    Mais ça affiche ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    LOAD DATA LOCAL INFILE \var\log\sauvegardes"." INTO TABLE sauve
    You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '\var\log\sauvegardes"." INTO TABLE sauve' at line 1

  11. #11
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    bon si j'ai bien compris ton chemin est \var\log\sauvegardes
    donc deja pense a rajouter \ a la fin.
    Par contre les " doivent etre autour du chemin complet et pas uniquement le nom de fichier donc ca remssemblerait plutot a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $requete = "LOAD DATA LOCAL INFILE \<a href="file://\\var\\log\\sauvegarde\\" target="_blank">\\var\\log\\sauvegarde\\</a> . $file . "\ " INTO TABLE matable";
    Mais c'est cette histoire de point qui est bizarre. Et tu sur que l'erreur surgit quand $file = fichier.log et pas quand c'est . ou .. ?
    Tout énigme a une solution ! Tout est question de discipline !

  12. #12
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Bebel
    Mais c'est cette histoire de point qui est bizarre. Et tu sur que l'erreur surgit quand $file = fichier.log et pas quand c'est . ou .. ?
    Ben je suppose, car quand je met cette requête j'ai le message d'erreur et ça affiche pas l'echo du $file
    Si je l'enleve, ça me met bien ce que j'ai dis plus haut.

    Mais il y a un truc que je comprends pas, c'est quand tu dis qu'il faut des " entre le chemin, mais tu l'as pas fait il manque au début du chemin (je suppose que tu a mis un troisième \ à la place par erreur).

    Sinon, quelque chose que je comprends pas c'est ce qu'il y a en rouge:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $requete = "LOAD DATA LOCAL INFILE \\\var\\log\\sauvegarde\\ . $file . "\ " INTO TABLE matable";


    En tout cas ça me donne des erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning:  Unexpected character in input:  '\' (ASCII=92) state=1 in /var/www/index.php on line 45
    Merci de ton aide et de ta disponibilité.

  13. #13
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    de rien,
    mais c'est vrai il y avait quelques erreurs dans ma synthaxe, je dois pas avoir encore atteint ma dose de café, pour commencer a etre operationnel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    $requete = "LOAD DATA LOCAL INFILE \"<a href="file://\\var\\log\\sauvegarde\\" target="_blank">\\var\\log\\sauvegarde\\</a>" . $file . "\" INTO TABLE matable";
    En fait il manquait le " juste apres le premier \.
    et pour la partie en rouge il ne faut pas d'espace en fait.
    Tout énigme a une solution ! Tout est question de discipline !

  14. #14
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Points : 6
    Points
    6
    Par défaut
    Ah c'est mieux mais pas encore ça

    Donc maintenant j'ai ma page qui s'affiche, mais j'ai une erreur "Query was empty" et en effet, $file vaut: '.'
    C'est dû à quoi ?

  15. #15
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    readfile liste a la fois les dossiers et les fichiers
    et . correspond au dossier courant et .. au dossier parent
    donc le mieux pour ca je te conseille de faire des tests avant l'execution de la requete
    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
     
    if (is_file("<a href="file://var//log//sauvegarde/" target="_blank">\\var\\log\\sauvegarde\\</a>" . $file) and $extension == "log")
    {
    // execution de la requete.
     
    }
    Tout énigme a une solution ! Tout est question de discipline !

  16. #16
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Points : 6
    Points
    6
    Par défaut
    j'ai mis juste un "if ($file != ".") "
    ça fonctionne, j'arrive à affichier mon fichier.log mais ça me met toujours "sql query was empty"

    Pourtant là la valeur de $file est bien mon fichier.log

    PS: ma requête sql est bien dans ma condition if.

  17. #17
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    rajouter un test aussi sur ".." car le readfile le prend aussi et ca provoquera la meme erreur.

    a la limite a chaque boucle affiche $file et la requete s'il elle est generee, tu verra bien d'ou peut provenir l'erreur.
    Tout énigme a une solution ! Tout est question de discipline !

  18. #18
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Points : 6
    Points
    6
    Par défaut
    C'est ce que j'ai fait pour l'affichage et pour le ".."
    ça affiche "." ".." puis "fichier.log" et ça me met l'erreur SQL

  19. #19
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    Toujours la meme erreur?
    et essaye sans mettre les \" pour voir
    Tout énigme a une solution ! Tout est question de discipline !

  20. #20
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Si tu as une extension prédéfinie pour tes fichiers, genre .doc, tu peux tester facilement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (substr($file, -3) == 'doc') {
    echo 'le fichier est un .doc';
    } else {
    echo 'le fichier est autre chose';
    }
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

Discussions similaires

  1. Requête sql pas si difficile au final
    Par nicocotiers dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/09/2012, 11h30
  2. Création d'une rêquete SQL pure
    Par Australia dans le forum Doctrine2
    Réponses: 5
    Dernier message: 18/07/2012, 12h11
  3. affecter les resultats d'une rêquete SQL à une table
    Par soforan dans le forum Bases de données
    Réponses: 8
    Dernier message: 01/01/2009, 22h05
  4. [VB][SQL Server]Début difficiles
    Par javaboy dans le forum VB.NET
    Réponses: 10
    Dernier message: 07/03/2008, 13h16
  5. Questions sur les rêquetes sql oracle?
    Par naima2005 dans le forum SQL
    Réponses: 6
    Dernier message: 24/12/2007, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo