ZePhenix
Messages postés3Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention20 août 2007
-
30 juil. 2007 à 14:30
ZePhenix
Messages postés3Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention20 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?
ZePhenix
Messages postés3Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention20 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!
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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 ?