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 :

Utiliser la fonction sql EXECUTE dans script PHP


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 18
    Points : 8
    Points
    8
    Par défaut Utiliser la fonction sql EXECUTE dans script PHP
    Bonjour,

    Voilà mon problème : j'ai des requêtes préparées au format SQL (PREPARE .. etc...) que j'ai ajoutées à ma BDD et je voudrais m'en servir dans PHP, de la même manière que je le ferais dans le shell SQL : en faisant juste un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->query("execute MaRequete");
    Néanmoins, PDO ne renvoie rien (la requête ne s'exécute pas) ce qui me cause une erreur par la suite.

    Sauriez-vous si c'est possible, ce que je veux faire, ou s'il faut obligatoirement passer par la méthode prepare de PDO ? Parce que j'ai quand même un bon paquet de requêtes déjà préparées en SQL que je n'ai pas foncièrement envie de recopier dans mon code php...

    Merci bien

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Franchement, je crois que non

    Maintenant, tu peux copier toutes tes requêtes dans un fichier, tagger dans le php toutes les querry puis de faire un script qui parse tous tes fichiers php en remplaçant les tags par la requête. Mais ça serait bien de le faire si tu as au mois une centaines de requêtes !!
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Utilise des procédures stockées pour faire ça.

  4. #4
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Bonjour,

    C'est plutôt PDO::exec que tu cherches...

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Théocrite: le problème c'est que exec ne renvoie rien, si ? or, j'ai des reqûetes préparées qui renvoient quelque chose.

    Là j'ai par exemple un fichier SQL avec une bonne cinquantaine de préparations de requêtes comme ça que j'ai exécutées dans mon serveur sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    prepare Membre_date from
    '
    select *
    from Membre
    where (Membre.date_débutMembre < ?
        and (Membre.date_finMembre > ? or Membre.date_finMembre is Null));
    ';
    Et je voudrais, dans mon script php, faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $donnees = $bdd->query("execute Membre_date");
    (je mets pas les paramètres mais vous avez compris) pour récupérer directement le résultat de la requête, sans passer par les méthodes de PDO.

  6. #6
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Tu fais bien un PDOStatement::execute après ton query ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $rq = $db->query('...');
    $donnees = $rq->execute();

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Oui, et voilà la réponse :
    Fatal error: Call to a member function execute() on a non-object in index.php on line 20
    Edit: bien entendu, ça marche quand ça n'est pas une requête préparée (sans avoir besoin du execute d'ailleurs dans ce cas)

    Edit 2 : par contre ce code marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $bdd->query('prepare Nb_Livres from
    \'
    select COUNT(*)
    from Livre;
    \';');
     
    $sql = $bdd->query('execute Nb_livres;');
     
    echo  $sql->fetch()[0];

  8. #8
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Et sur cette page, tu trouves pas ton bonheur (procédures stockées par exemple comme disais Benjamin Delespierre.

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Bah justement non, les créations de procédures doivent (c'est un impératif du projet) rester dans un fichier .sql séparé, être exécutées une fois quand on crée la base (ou en cas de modification d'une procédure), et ne pas apparaître directement dans le code, qui ne doit faire appel qu'à des execute.
    La préparation doit être entièrement faite en SQL en gros, sans faire appel aux méthodes de PDO.

    Donc par exemple, sur ta page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
    Ca, ce n'est pas compatible avec le projet.

  10. #10
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Je pensais plus à la procédure stockée juste en dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $stmt = $dbh->prepare("CALL sp_returns_string(?)");
    $stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000); 
     
    // call the stored procedure
    $stmt->execute();
     
    print "procedure returned $return_value\n";
    Mais du coup ça doit pas pouvoir le faire non plus j'imagine...

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Non, désolé, on doit utiliser des requêtes préparées et non des procédures (j'ai du faire un abus de langage plus haut)

  12. #12
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Vous tournez en rond mes amis, les procédures stockées sont forcement exploitables mais pas des méthodes qui dans mon sens sont propre à ton script Bdd. Malheureusement tant que tu restes dans le domaine de l'application de ta base, tu ne pourras pas le faire (à moins de trouver l'exporté qui va bien).Dans ton cas tu reviendras tjs à faire bq de copier/coller.
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/07/2010, 15h53
  2. Problème d'utilisation de gnome-web-photo dans script PHP
    Par 9h0ost dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 21/08/2009, 11h22
  3. Réponses: 1
    Dernier message: 24/04/2009, 12h23
  4. [SQL] Executer un script SQL depuis php
    Par sly3333 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 07/12/2007, 02h33
  5. executer un script php avant fonction Flash
    Par dede64 dans le forum Dynamique
    Réponses: 2
    Dernier message: 13/01/2007, 06h18

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