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

Zend_Db PHP Discussion :

Appel fonctions stockées // Mysql


Sujet :

Zend_Db PHP

  1. #1
    Membre habitué
    Avatar de __fabrice
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Août 2004
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2004
    Messages : 404
    Points : 194
    Points
    194
    Par défaut Appel fonctions stockées // Mysql
    Bonjour à tous,

    Je suis en train de faire des fonctions stockées avec Mysql et Zend.

    Les procédures stockées, c ok.. les vues, c ok, mais pas les fonctions stockées.

    J'ai des erreurs de syntaxe ou alors le moteur mysql me dit la procédure is_test() n'existe pas (et oui, c une fonction)

    Par exemple, la fonction (qui aura des paramètres en fait) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    BEGIN
    declare is_test bool;
     
    SELECT
    	count(`USR_ID`) > 0 INTO is_test 
    FROM
    	`utilisateur`;
     
    RETURN is_test;
     
    END
    Avec Zend :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $dbAdapter = Zend_Registry::get('front_db');
    $func = 'CALL is_test()';
    $stmt= $dbAdapter->query($func);
    J'ai essayé plusieurs manieres de faire (comme pour les vues) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $func = 'SELECT * FROM is_test()';
    Les 2 ne marchent pas, comment faire ?.

    Pour rappel, voici comment faire pour des procédures stockées et des vues (si çà peut aider quelqu'un ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $call = 'CALL sp_utilisateur_ins("'.
                    $data['USR_IDENTIFIANT'].'","'.
                    $data['USR_MOT_DE_PASSE'].'","'.
                    $data['USR_ADRESSE_EMAIL'].'","'.
                    $data['USR_CONTROLE'].'","'.
                    $data['USR_ROLE'].'","'.
                    $data['USR_CLE_ACTIVATION'].'","'.
                    '0","'.
                    $data['USR_DATE_CREATION'].'","'.
                    '1",'.
                    '@PAR_USR_ID)';
     
    $stmt = $dbAdapter->query($call);
    $row  = $dbAdapter->query("SELECT @PAR_USR_ID");
    $row  = $row->fetchAll();
     
    $insertId = (int)$row[0]['@PAR_USR_ID'];
     
     
    $rows= $dbAdapter->query("SELECT * FROM view_available_annonce");
    var_dump($rows->fetchAll());
    Merci
    Fabrice

  2. #2
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Bonjour,
    As tu essayé d'utiliser prepare et execute sur une instance de Zend_Db ?

    Ou regarde ce post :
    http://www.developpez.net/forums/d72...re-stocke-sql/

  3. #3
    Membre habitué
    Avatar de __fabrice
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Août 2004
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2004
    Messages : 404
    Points : 194
    Points
    194
    Par défaut
    Salut,

    Merci, mais non , çà c une autre syntaxe pour une procédure stockées, mais pas pour une fonction stockée. J'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLSTATE[42000]: Syntax error or access violation: 1305 PROCEDURE foo.is_utilisateur_existe does not exist
    Tout est là, le soucis vient des fonctions stockées.

    Une autre idée ?

    Fabrice

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    moi même je n'y suis jamais arrivé.
    Pour le coup, je crée une procédure stockée qui se charge d'encapsuler l'appel à la fonction stockée.

  5. #5
    Membre habitué
    Avatar de __fabrice
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Août 2004
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2004
    Messages : 404
    Points : 194
    Points
    194
    Par défaut
    Je crois que j'ai la solution (voir ici).

    Il faut faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    BEGIN
    declare is_test bool;
     
    SELECT
    	count(`USR_ID`) > 0 INTO is_test 
    FROM
    	`utilisateur`
     
    WHERE `USR_ID` = param_utilisateur_id AND `USR_ROLE` = param_utilisateur_role;
     
    RETURN is_test;
     
    END
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $stmt = $dbAdapter->prepare("SELECT is_test(:id,:role)");
    $stmt->execute(array(':id'=>1,':role'=>'administrator'));
    print_r($stmt->fetchAll());
    Cela me renvoi ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [0] => Array ( [is_test('1','administrator')] => 0 ) )
    Voilà
    Fabrice

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

Discussions similaires

  1. Appel Procédure/fonction stockée MySQL en VBScript
    Par forzalec dans le forum VBScript
    Réponses: 1
    Dernier message: 12/02/2014, 12h05
  2. Appel d'une fonction stockée MySQL depuis un module VB.Net
    Par mddkkr dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 22/09/2013, 17h12
  3. Appeler procédure stockée mysql
    Par gabdeschenes dans le forum ASP.NET
    Réponses: 10
    Dernier message: 18/11/2009, 09h49
  4. Appel fonction stockée dans la base depuis forms
    Par italiasky dans le forum Forms
    Réponses: 7
    Dernier message: 20/10/2008, 13h13

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