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
A voir également:
Procédure stockée sql server avec paramètre
Sql server procedure stockée parametre output - Meilleures réponses
Exécuter une procédure stockée sql server - Meilleures réponses
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!
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 ?