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] Traitement de plusieurs requêtes .SQL dans un script PHP?


Sujet :

PHP & Base de données

  1. #1
    M4x
    M4x est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 16
    Points
    16
    Par défaut [SQL] Traitement de plusieurs requêtes .SQL dans un script PHP?
    Bonjour,

    En rapport avec ce problème.

    Voila grosso modo la tronche du script qui sera executé périodiquement avec un cron job:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?
    require("identifresh.inc.php");
     
    $connexion = mysql_connect(localhost,$user,$pass);
    @mysql_select_db($database) or die( "Base introuvable");
     
    ICI un fichier .sql contenant toutes les requêtes à executer. 
     
    mysql_close($connexion);
    ?>
    Dans le identifresh.inc.php je mettrai mes variables de connexion bien sûr.

    Ma question est donc : Comment éxecuter dans un fichier PHP les requêtes SQL qui se trouvent à l'intérieur d'un fichier .sql (quelque part sur le serveur, exemple backup.sql) ? Doit bien y avoir une fonction pour ça je suppose nah ?
    Certes je pourrai copier/coller en ces fameuses requetes, mais doit bien y avoir un moyen de lire celles-ci depuis un fichier sql non ?

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Je pense que tu as deux options.
    • Utiliser une commande système pour exécuter les commandes de ton fichier (je déplacerai le sujet dans le forum MySQL si c'est la solution que tu choisis)
    • Utiliser la fonction PHP split() pour exécuter les requêtes une à une, ce qui peut poser problème si tu as des points virgules ailleurs que pour séparer les requêtes


    À mon avis, le mieux serait d'avoir un fichier texte de données brutes et d'utiliser mysqlimport ou LOAD DATA INFILE, plutôt que d'exécuter le SQL contenu dans un fichier.

  3. #3
    M4x
    M4x est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Salut Kirkis,

    En fait je place ceci dans un fichier .php car je veux que ce soit executer automatiquement et periodiquement par un cron (donc aucun input utilisateur).

    Utiliser la fonction PHP split() pour exécuter les requêtes une à une, ce qui peut poser problème si tu as des points virgules ailleurs que pour séparer les requêtes
    Ok mais la fonction split elle va trifouiller dans le fichier sql ? Car il est pour moi hors de question que je sorte les requetes de leur fichier sql.

    Enfin bon, je jetterai un oeil à toutes les fonctions PHP dispo' qui tournent autour de MySQL, et puis je me suis commandé le bouquin des editions o'reilly, étant donné que ça n'a pas l'air si simple que ça, donc bon...je finirais par trouver comment lire et executer automatiquement un fichier .sql a partir d'un fichier php -_-' .

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Peu importe que ton script soit exécuté par une tâche cron ou autrement. Du moment qu'il est exécuté, cela nous suffit pour réfléchir à la manière de le construire ^^

    Comment veux-tu exécuter des requêtes contenues dans un fichier SQL si tu n'accèdes jamais à ce fichier ? Tu es bien obligé de le lire à un moment ou à un autre !
    Mon idée était d'utiliser file_get_contents() pour récupérer les requêtes dans une variable, puis split() sur cette variable pour séparer les requêtes et ainsi pouvoir les exécuter une à une.

    Je le répète, la meilleure solution consisterait à avoir un fichier CSV plutôt qu'un fichier contenant les requêtes SQL. Là, oui, ce serait simple à importer. Mais j'imagine qu'il ne s'agit pas (uniquement ou du tout) d'importer des données...

  5. #5
    M4x
    M4x est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Kirkis
    Peu importe que ton script soit exécuté par une tâche cron ou autrement. Du moment qu'il est exécuté, cela nous suffit pour réfléchir à la manière de le construire ^^
    Oui

    Comment veux-tu exécuter des requêtes contenues dans un fichier SQL si tu n'accèdes jamais à ce fichier ? Tu es bien obligé de le lire à un moment ou à un autre !
    Mais justement c'est la ma question, comment y accéder à ce foutu fichier et lire son contenu :p !?

    Mon idée était d'utiliser file_get_contents() pour récupérer les requêtes dans une variable,
    Et ben voila ! Ca ressemble a ce que je cherchais ça dites donc :p !!! je vais aller lire les détails de cette fonction tiens.

    puis split() sur cette variable pour séparer les requêtes et ainsi pouvoir les exécuter une à une.
    Hum ok ok...ne connaissant que peu encore ce genre de bidouilles, je ne vois pas l'intéret du split encore, ça va sûrement venir quand j'aurai fait crasher le serv lol...

    Je le répète, la meilleure solution consisterait à avoir un fichier CSV plutôt qu'un fichier contenant les requêtes SQL. Là, oui, ce serait simple à importer. Mais j'imagine qu'il ne s'agit pas (uniquement ou du tout) d'importer des données...
    Et bien je t'explique brièvement. Imagine que je souhaite mettre phpBB et son administration en demonstration sur un site, pour que les internautes puissent essayer l'admin de phpBB, voir à quoi ça ressemble, si ça leur convient etc...Moi je leur fournis un identifiant admin lambda genre user=admin et pass=demo. Seulement voila...si je laissais faire, au bout d'un moment, le forum pourrait avoir plein de sujets tests à la con, ou pire encore un admin lambda vilain (ô le vil) pourrait décider de changer le mot de passe "demo" et la les autres pourraient plus essayer l'admin par defaut...donc je souhaite "reset" périodiquement la base de données phpBB (une fois par heure peut etre) en remplacant cette dernière avec un backup (qui est au format SQL) effectué avant même que je ne mette le site en demo.

    Pour faire + court :

    1. phpBB est installé avec son install par defaut, avec un compte admin bidon (admin/demo).
    2. je backup le tout sur un fichier sql.
    3. Les visiteurs arrivent, s'amusent avec l'administration.
    4 Au bout d'une heure, cron entre en action avec le script qui se connecte a la base de donnees et remplace celle-ci (supposément modifié par les visiteurs donc) par le backup effectué dans l'etape 2.

    Voila de quoi il s'agit exactement. Maintenant un fichier CSV (c'est pas pour gérer les changement de version ça ?) je suis pas sur de voir ce que c'est :p..donc je vais me documenter dessus.

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Ah, alors il y a bien plus simple

    MySQL dispose de fonctions permettant de copier des tables entières avec leur contenu. J'imagine, sans avoir vérifié, qu'il y a la même fonctionnalité avec une BDD complète.

    Tout dépend des droits que tu as sur ta BDD. Si tu es autorisé à créer plusieurs bases de données, le plus simple est d'en conserver une copie (dans une BDD appelée `phpbb2_bak`, par exemple). Ton script se contentera donc de vider la BDD `phpbb2` puis d'y copier `phpbb2_bak`.
    Sinon, le principe est identique mais appliqué à chaque table. La seule difficulté consiste à sélectionner toutes les tables de la BDD en faisant la différence entre les tables _bak et les autres (celles utilisées pour la démo).

    J'ai dit CVS de tête mais je crois que j'ai fait erreur. Je faisais référence aux fichiers de données utilisant un caractère pour séparer les champs (TAB, par exemple).
    Bien sûr, mon logiciel de traitement de texte me fait la tête aujourd'hui et il ne me propose plus ce format, donc pas moyen de retrouver le nom correct.
    [Edit] Je n'étais pas loin : je parlais de "CSV".

Discussions similaires

  1. [AC-2003] Plusieures requêtes SQL en vba dans la même macro?
    Par PAUL87 dans le forum VBA Access
    Réponses: 4
    Dernier message: 22/10/2013, 16h43
  2. Afficher plusieurs requêtes SQL dans une ListView
    Par GYooo dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 01/02/2013, 02h07
  3. Exécution de plusieurs requêtes SQL dans Oracle
    Par 4rocky4 dans le forum PL/SQL
    Réponses: 7
    Dernier message: 19/03/2009, 11h12
  4. [Data] [iBATIS] Plusieurs requêtes SQL dans un <statement> ?
    Par Tourix dans le forum Spring
    Réponses: 3
    Dernier message: 04/09/2006, 15h40
  5. Plusieurs requêts SQL dans un QReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 9
    Dernier message: 23/05/2006, 15h04

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