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 :

Creation bases de données à la volée dans PHP [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Points : 311
    Points
    311
    Par défaut Creation bases de données à la volée dans PHP
    Bonjour,

    Pour mon intranet, j'ai besoin de créer des bases de données à la volée sur mon serveur MySQL, mais je ne sais pas trop comment m'y prendre.

    Si j'écris les CREATE et les INSERT dans un fichier, comment je fais pour charger ce fichier ?


    Merci,
    *.Har(d)t
    ---
    "Je donnerais mon bras droit pour être ambidextre"
    Brian W. Kernighan

  2. #2
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    tu peux exécuter ces requêtes comme n'importe quelle autre :
    http://eusebius.developpez.com/phpmysql-base/
    GNAP !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Points : 311
    Points
    311
    Par défaut
    Merci.

    Je sais que je peux passer un CREATE via un mysql_query.

    Le problème c'est que je voudrais éviter de faire x requêtes pour créer la base, faire les DROP TABLE IF EXISTS, puis les CREATE TABLE, puis les INSERT etc...

    Passer toutes ces requêtes via une seule String ne fonctionne pas car mysql s'arrête après le premier point-virgule, et n'exécute que la première (au mieux)

    J'ai donc coller tout ça dans un fichier texte, que je cherche à charger en un coup.

    LOAD DATA INFILE fait ça mais uniquement pour insérer des données, les créations de tables/bases et suppressions ne passent pas.

    Je suis en train de tester via un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     exec('mysql -utoto -P1234 -ptutu < C:\monfichier.txt');
    Mais j'ai des problèmes avec la fonction exec (unable to fork) qui semblent être liés à des histoires de droits d'exécution.

    J'ai aussi tenté un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = 'source C:/toto.sql';
    $req = mysql_query($sql) or die(mysql_error());
    Mais ça ne passe pas non plus, j'ai l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 'source C:/toto.sql' at line 1
    J'ai testé ça en ligne de commande et c'est une instruction valide.
    Dans Mysql Query Browser en revanche, même erreur, donc j'en déduis que "source" ne peut être utilisée que via la ligne de commande.

    Et comme mon exec ne veut pas passer, je suis un peu bloqué.
    *.Har(d)t
    ---
    "Je donnerais mon bras droit pour être ambidextre"
    Brian W. Kernighan

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Points : 550
    Points
    550
    Par défaut
    Sinon pourquoi ne pas faire un truc plus simple, du genre :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql = file_get_contents("toto.sql");
    mysql_query($sql);

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Points : 311
    Points
    311
    Par défaut
    Citation Envoyé par sachav Voir le message
    Sinon pourquoi ne pas faire un truc plus simple, du genre :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql = file_get_contents("toto.sql");
    mysql_query($sql);
    Citation Envoyé par *.Har(d)t Voir le message
    Merci.

    Passer toutes ces requêtes via une seule String ne fonctionne pas car mysql s'arrête après le premier point-virgule, et n'exécute que la première (au mieux)
    J'ai retenté, par acquit de conscience, mais j'obtiens bien l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 '; DROP TABLE IF EXISTS[...]
    Il exécute bien la première requête (qui est un CREATE DATABASE), puis plante sur la seconde (DROP TABLE IF EXISTS) juste après le point-virgule de la première.

    La seule solution que je verrais serais d'exploser tout et de faire autant de mysql_query que de requêtes, mais ce n'est pas très optimisé: Avoir les requêtes dans un fichier sql est plus simple d'un point de vue maintenance (pas besoin de toucher au code PHP si je change les bases qui sont crées à la volée.)
    *.Har(d)t
    ---
    "Je donnerais mon bras droit pour être ambidextre"
    Brian W. Kernighan

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Points : 550
    Points
    550
    Par défaut
    mysql s'arrête après le premier point-virgule ??? Bizarre...
    Sinon, t'as qu'à faire un explode et exécuter tes requêtes unes à unes ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $sql = file_get_contents("toto.sql");
    $sql = explode(";", $sql);
    $nbqueries = sizeof($sql);
    foreach($sql as $key=>$sqlquery) {
    echo "Exécution ".$key."/".$nbqueries." : ".$sqlquery."<br />";
    mysql_query($sqlquery) or die("Erreur lors de la requête.<br />");
    echo "OK<br />";
    }
    // code non testé

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Points : 311
    Points
    311
    Par défaut
    Bon, j'ai dû me résoudre à tout passer dans le code, avec un tableau contenant les différentes requêtes afin de les exécuter l'une après l'autre.
    *.Har(d)t
    ---
    "Je donnerais mon bras droit pour être ambidextre"
    Brian W. Kernighan

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Contenu texte et logs dans base de données ou fichiers txt/php?
    Par dev14 dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 30/07/2012, 10h10
  2. Réponses: 1
    Dernier message: 22/07/2010, 13h57
  3. Pbm : Connexion base de donnée SQL 2005 dans Visual Studio C#
    Par vampyrx dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/05/2006, 20h55
  4. Développer une base de données sans BDE dans DELPHI 3 PRO
    Par ndlh721 dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/02/2005, 14h21
  5. [VB.NET] Programmer la creation base de données
    Par papy27 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 02/09/2004, 13h00

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