Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai un problème avec l'appel d'une procédure stockée MySQL comportant plusieurs paramètres de type OUT.
Entête de la procédure :
CREATE PROCEDURE `PRC_USER_VALIDE`(p_login VARCHAR(20), p_pwd VARCHAR(10), OUT p_nom VARCHAR(50), OUT p_admin BOOL, OUT p_mess VARCHAR(200)) ..... .....
Appel de la procédure dans la méthode qui va bien :
..... ..... $strNom=str_pad('', 50); $intAdmin=-1; $strMess=str_pad('', 200); // Préparation de l'appel de la procédure stockée $request = $this->dbConx->prepare("CALL PRC_USER_VALIDE(:pLogin, :pPwd, :pNom, :pAdmin, :pMess);"); // Init. des paramètres $request->bindParam(':pLogin', $aLogin); // Paramètre de la méthode $request->bindParam(':pPwd', $aMot); // Paramètre de la méthode $request->bindParam(':pNom', $strNom, PDO::PARAM_STR, 20); $request->bindParam(':pAdmin', $intAdmin, PDO::PARAM_STR, 10); $request->bindParam(':pMess', $strMess, PDO::PARAM_STR, 200); // Exécution de la procédure $retour = $request->execute(); ..... .....
Message d'erreur affiché à l'exécution :
exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[HY000]: General error: 1414 OUT or INOUT argument 3 for routine disco.PRC_USER_VALIDE is not a variable or NEW pseudo-variable in BEFORE trigger
C'est un message d'erreur de MySQL, mais l'appel de la procédure avec MySQL Query Browser retourne bien le résultat attendu.
Je pense plutot qu'il y manque quelque chose dans mon code. Mais quoi ? ? ?
Merci de votre aide.
Hors ligne
les variables strNom intAdmin et strMess doivent exister avant l'appel
le plus simple est de leur assigner une chaine vide
mais je ne sais si c'est là ton pb
A+JYT
Hors ligne
Merci pour la réponse,
mais .... l'init. des variables est faite dans les lignes au dessus du "...->prepare(....".
Merci.
A +
Hors ligne
sory j'ai lu trop vite
je ne sais que te dire l'erreur 1414 de mySql dit que tu as passé un littéral à la place d'une variable en argument
je ne sais pas où en est cette histoire mail il y avait un bug de référencé sur le sujet
http://bugs.mysql.com/bug.php?id=25970
A+
Hors ligne
Merci pour ta réponse,
Je vais transformer tout ça en fonction ....
Hors ligne
$registry = Zend_Registry::getInstance(); $config = $registry->get("config"); $db = Zend_Db::factory($config->db); $stmt = $db->prepare("call import(?,?,?);"); $stmt->bindParam(1, $param1, PDO::PARAM_STR,1000); $stmt->;bindParam(2, $param2, PDO::PARAM_STR, 255); $stmt->bindParam(3, $param3, PDO::PARAM_STR, 255); $res = $stmt->execute();
voila un code qui fonctionne par contre la procedure on la stocke ou ?
Hors ligne
Salut,
J'ai tourné un moment avant de pouvoir faire un appel qui ne me retourne pas d'erreur, j'éspère que cela pourra aider quelqu'un :
$call = $this->_db->query("CALL addChild(?, @output)", array($id_parent)); $result = $this->_db->query("SELECT @output")->fetch(); return $result['@output'];
++
Hors ligne