Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/04/2006, 10h31   #1
Invité de passage
 
Inscription : avril 2006
Messages : 34
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 34
Points : 1
Points : 1
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
draho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 11h05   #2
Expert Confirmé
 
Avatar de titoumimi
 
Inscription : décembre 2003
Messages : 3 717
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2003
Messages : 3 717
Points : 3 082
Points : 3 082
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
titoumimi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 11h18   #3
Invité de passage
 
Inscription : avril 2006
Messages : 34
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 34
Points : 1
Points : 1
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 ?
draho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 11h25   #4
Expert Confirmé
 
Avatar de titoumimi
 
Inscription : décembre 2003
Messages : 3 717
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2003
Messages : 3 717
Points : 3 082
Points : 3 082
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
titoumimi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 11h38   #5
Invité de passage
 
Inscription : avril 2006
Messages : 34
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 34
Points : 1
Points : 1
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 ?
draho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 15h52   #6
Invité de passage
 
Inscription : avril 2006
Messages : 34
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 34
Points : 1
Points : 1
Bien j'ai compris comment marchait cette fonction mais maintenant je ne sais pas comment utiliser la variable dans ma requête SQL ?
draho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 16h00   #7
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
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 : 742
Points : 1 085
Points : 1 085
normalement tu dois avoir un code qui ressemble a cela
Code :
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 :
1
2
$requete = "LOAD DATA LOCAL INFILE " . $file;
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 16h59   #8
Invité de passage
 
Inscription : avril 2006
Messages : 34
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 34
Points : 1
Points : 1
Citation:
Envoyé par Bebel
Code :
1
2
$requete = "LOAD DATA LOCAL INFILE " . $file;
Ca ne marche pas, ça me met l'erreur ==>
Code :
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
draho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 17h23   #9
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
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 : 742
Points : 1 085
Points : 1 085
Bon cela est pour 2 raisons
- 1
je viens de verifier la synthase et c'est
Citation:
LOAD DATA INFILE "donnees.txt" INTO TABLE db2.ma_table
donc le code ressemblerait a
Code :
1
2
[LEFT]$requete = "LOAD DATA LOCAL INFILE \"" . $file . "\" INTO TABLE matable";[/LEFT]
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.
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 09h17   #10
Invité de passage
 
Inscription : avril 2006
Messages : 34
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 34
Points : 1
Points : 1
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 :
$requete = "LOAD DATA LOCAL INFILE \mon\chemin\"" . $file . "\" INTO TABLE matable";
Mais ça affiche ça:
Code :
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
draho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 09h28   #11
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
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 : 742
Points : 1 085
Points : 1 085
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 :
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 .. ?
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 09h46   #12
Invité de passage
 
Inscription : avril 2006
Messages : 34
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 34
Points : 1
Points : 1
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 :
1
2
$requete = "LOAD DATA LOCAL INFILE \\\var\\log\\sauvegarde\\ . $file . "\ " INTO TABLE matable";


En tout cas ça me donne des erreurs
Code :
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é.
draho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 09h54   #13
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
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 : 742
Points : 1 085
Points : 1 085
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 :
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.
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 10h08   #14
Invité de passage
 
Inscription : avril 2006
Messages : 34
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 34
Points : 1
Points : 1
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 ?
draho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 10h13   #15
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
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 : 742
Points : 1 085
Points : 1 085
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 :
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.
 
}
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 10h32   #16
Invité de passage
 
Inscription : avril 2006
Messages : 34
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 34
Points : 1
Points : 1
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.
draho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 10h44   #17
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
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 : 742
Points : 1 085
Points : 1 085
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.
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 10h51   #18
Invité de passage
 
Inscription : avril 2006
Messages : 34
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 34
Points : 1
Points : 1
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
draho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 10h53   #19
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
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 : 742
Points : 1 085
Points : 1 085
Toujours la meme erreur?
et essaye sans mettre les \" pour voir
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 10h55   #20
Expert Confirmé
 
Avatar de titoumimi
 
Inscription : décembre 2003
Messages : 3 717
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2003
Messages : 3 717
Points : 3 082
Points : 3 082
Si tu as une extension prédéfinie pour tes fichiers, genre .doc, tu peux tester facilement :

Code :
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 !
_______________________________________________________________________
La rubrique Ruby / Rails recrute. Contactez moi !
_______________________________________________________________________
Cours Ruby et Ruby on Rails (RoR) - FAQ Ruby / Rails - Livres Ruby / Rails
Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
Tutoriaux HTML/CSS et PHP
titoumimi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h28.


 
 
 
 
Partenaires

Hébergement Web