Execution procedure stockée prepareSP SQL Server

Résolu
ZePhenix Messages postés 3 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 20 août 2007 - 30 juil. 2007 à 14:30
ZePhenix Messages postés 3 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 20 août 2007 - 1 août 2007 à 09:56
Bonjour,

Je souhaite faire une classe de connection ayant un fonction permettant d'executer une procedure stockée SQL Server ayant un parametre d'entree et un parametre de sortie à partir d'une page PHP.
j'utilise donc la fonction prepareSP().

la connection se fait dans une classe de connection avec les parametres suivants:
define('DB_DRIVER','odbc_mssql');
define('DB_DSN','Driver= {SQL Server};Server=XXXX;Database=XXXX;');

ma fonction d'execution de procedure stockée:
public function execQuery($Query,$param1)
    {
        $stmt =$this->conn->PrepareSP($Query);
        $this->conn->InParameter($stmt,$param1,'entree');
        $this->conn->OutParameter($stmt,$ret,'sortie');
        $this->conn->Execute($stmt);
    }

ma procedure stockée:
CREATE  procedure sp_suppr_sta_groupe (@entree varchar(6), @sortie int output)
as
begin
    BEGIN TRANSACTION
    delete from sta_groupe where id=@entree;
    if (@@error=0)
        begin
            set @sortie= @@rowcount
            COMMIT
        end
    else
        begin
            ROLLBACK
            set @sortie= 0
        end
end
GO

l'execution de ma fonction génère l'erreur suivante:
Error :
Date
:2007-07-30 14:28:08 (CEST)
Errornum :2
Errortype :Alerte
Errormsg
:odbc_execute() [[function.odbc-execute function.odbc-execute]]: SQL
error: [Microsoft][ODBC SQL Server Driver][SQL Server]Procedure
'sp_suppr_sta_groupe' expects parameter '@entree', which was not supplied., SQL
state 37000 in SQLExecute
Scriptname
:C:\Applics\PHP\include\adodb480\adodb\drivers\adodb-odbc.inc.php
Scriptlinenum
:510

Je n'arrive pas du tout à trouver la solution, quelq'un aurait-il une idée?

Merci

2 réponses

ZePhenix Messages postés 3 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 20 août 2007
1 août 2007 à 09:56
Merci pour ta réponse.
Les méthodes PrepareSP() et InParameter sont fournies dans les classes adodb des packages php.
finalement, je suis passé par un objet COM pour créer ma fonction, et ça tourne niquel. En fait, c'etait ma connexion qui n'acceptait pas ces commandes...
Voilà ce que ça donne maintenant:


public function execQueryCom($Query,$Param)
    {
       //initialisation de la connection adodb
        $conn = new COM("ADODB.Connection");
        $conn->CommandTimeout=0;
        $conn->ConnectionTimeout=0;   
        $conn->Open(DB_DSN." UID=".DB_USER.";PWD=".DB_PASSWORD.";");
        //initialisation de la commande adodb
        $oCmd = new COM("ADODB.Command");
        $oCmd->ActiveConnection = $conn ;
        $oCmd->CommandText = $Query;
       //le type 4 correspond a l'execution de proc stock
        $oCmd->CommandType = 4;
        $oCmd->CommandTimeout = 0;
        $oCmd->Prepared = true;       

        $var = trim($Param);
        //je test le type du parametre fourni et je le traite différement suivant son type ->affectation parametre d'netree
        if (is_string($Param))
        {
            $oCmd->Parameters->Append( $oCmd->CreateParameter("@entree", 200, 1 , 255, $var));
        }
        else
        {
            if (is_int($Param))
            {
                $oCmd->Parameters->Append( $oCmd->CreateParameter("@entree", 3, 1 , 10, $param));
            }
            else
            {
                if (is_float($Param))
                {
                    $oCmd->Parameters->Append( $oCmd->CreateParameter("@entree", 14, 1 , 20, $param));
                }
                else
                {
                    if (is_bool($Param))
                    {
                        $oCmd->Parameters->Append( $oCmd->CreateParameter("@entree", 11, 1 , 6, $param));
                    }
                }
            }
        }
    //je recupere ma cvariable de sortie
        $oCmd->Parameters->Append( $oCmd->CreateParameter("@sortie", 3, 2 ,5 , 0) );
        $oCmd->Execute();
        return $oCmd->Parameters['@sortie']->Value;
    }

J'ai donc pu résoudre mon problème, je peux facilement executer mes procedures stockées!
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
31 juil. 2007 à 18:47
Hello,

opn ne sait pas ce qu'il y a dans ta méthode PrepareSP(), et surtout dans InParameter() alors difficile de t'aider.
En tous cas, le message est clair : ta variable @entree n'est pas renseignée par ton la "prépération" de ta requête.
Donne le nom du package que tu utilises pour gérer ta connexion et tes requêtes, puisque je pense que cx'est un package trouvé sur le net ? Ou provenant d'un framework PHP ?
0
Rejoignez-nous