Execution procedure stockée prepareSP SQL Server [Résolu]

ZePhenix 3 Messages postés mercredi 29 novembre 2000Date d'inscription 20 août 2007 Dernière intervention - 30 juil. 2007 à 14:30 - Dernière réponse : ZePhenix 3 Messages postés mercredi 29 novembre 2000Date d'inscription 20 août 2007 Dernière intervention
- 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
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
ZePhenix 3 Messages postés mercredi 29 novembre 2000Date d'inscription 20 août 2007 Dernière intervention - 1 août 2007 à 09:56
3
Merci
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!

Merci ZePhenix 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de ZePhenix
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 31 juil. 2007 à 18:47
0
Merci
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 ?
Commenter la réponse de malalam

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.