Witam,
Doprecyzuje swoje pytanie, gdyż powstała pewna niejasność. Wiem jak napisać procedure sql. Problem dotyczy pobierania parametru output w skrypcie php za pomocą biblioteki php_mssql.dll i funkcji mssql_bind.
Napisałem sobie taką funkcję do inicjalizacji parametru natomiast po wykonaniu procedury spodziewałem się, iż na zmienną zostanie zapisana wartość parametru. Niestety na zmienną zapisywana jest jakaś dziwna wartość.
<?php
public function createParameter(&$spObj, $name, $type, $inout, &$initialValue, $maxLength=0){
if($initialValue == '' || is_null($initialValue)) $parmNull = true;
else
$parmNull = false;
switch($type){
case "char":
$dataType = SQLCHAR;
break;
case "varchar":
$dataType = SQLVARCHAR;
break;
case "int":
$dataType = SQLINT2;
break;
case "datetime":
$dataType = SQLINT4;
break;
case "text":
$dataType = SQLTEXT;
break;
case "money":
$dataType = SQLFLT8;
break;
default: throw new WebException("DbMsSql.CreateParameter: nieznany identyfikator typu");
}
switch ($inout)
{
case "in": $parmOutput = false;
if($maxLength > 0)
mssql_bind($spObj,$name,$initialValue,$dataType,false, $parmNull, $maxLength);
else
mssql_bind($spObj,$name,$initialValue,$dataType,false, $parmNull);
break;
case "out": $parmOutput = true;
mssql_bind($spObj,$name,&$initialValue,$dataType,true);
break;
default: throw new WebException("DbMsSql.CreateParameter: nieznany identyfikator inout");
}
}
else{
throw new WebException("Błąd tworzenia parametru do stored procedure. Nie przekazano obiektu inicja
lizacyjnego procedurę! Nazwa parametru:".$name);
}
}
public function initStoredProcedure($procedureName){
$res = @mssql_init($procedureName,$this->ConnId);
return($res);
}
public function execute(&$procObj) {
$this->QueryId = @mssql_execute($procObj);
if($this->QueryId){
return $this->QueryId;
}
else{
throw new WebException("Nie można wykonać procedury! DbMsSql.execute".mssql_get_last_message());
return(null);
}
}
?>
Wywołanie tego wszystkiego wyglada następująco:
<?php
$spObj = $this->objDb->initStoredProcedure("u_grupyUzytkownicy_AddRecord_usp");
$this->objDb->createParameter($spObj, "@grp_id", "int", "out", $grupaId);
$this->objDb->createParameter($spObj, "@grp_nazwa", "varchar", "in", $grp_nazwa);
$this->objDb->execute($spObj);
?>
dla jasności "$this->objDb" - obiekt bazodanowyPozdrawiam
poprawiam
---
nospor