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 Web
    Inscrit en
    août 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : août 2004
    Messages : 398
    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 expérimenté
    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 : 34
    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 373
    Points
    1 373
    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 Web
    Inscrit en
    août 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : août 2004
    Messages : 398
    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
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    5 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 5 548
    Points : 14 924
    Points
    14 924
    Billets dans le blog
    9
    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.
    # Dans la Création, tout est permis mais tout n'est pas utile...

  5. #5
    Membre habitué
    Avatar de __fabrice
    Homme Profil pro
    Développeur Web
    Inscrit en
    août 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : août 2004
    Messages : 398
    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, 13h05
  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, 18h12
  3. Appeler procédure stockée mysql
    Par gabdeschenes dans le forum ASP.NET
    Réponses: 10
    Dernier message: 18/11/2009, 10h49
  4. Appel fonction stockée dans la base depuis forms
    Par italiasky dans le forum Forms
    Réponses: 7
    Dernier message: 20/10/2008, 14h13

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