Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: stored procedures - parametr output (mssql_bind)
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
webnet
Witam,

Szukam informacji na temat pobierania wartość z procedur SQL Server 2000.

Jeżeli chodzi o przekazywanie wartośći to nie mam z tym problemów natomiast nie mam pojęcia jak uzyskać odwrotny efekt.
Używam funkcji mssql_bind.

Będe wdzięczny za wszelkie sugestie smile.gif

Pozdrawiam
nameless
  1. CREATE procedure outparm @a int output AS begin SET @a=9
  2. end
  3.  
  4. declare @s int
  5. exec outparm @s output
  6. SELECT @s
webnet
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ść.

  1. <?php
  2. public function createParameter(&$spObj, $name, $type, $inout, &$initialValue, $maxLength=0){
  3.  
  4.   if(is_resource($spObj)){
  5.   
  6.    if($initialValue == '' || is_null($initialValue))
  7.     $parmNull = true;
  8.    else
  9.     $parmNull = false;
  10.   
  11.    switch($type){
  12.   
  13.     case "char":
  14.      $dataType = SQLCHAR;
  15.      break;
  16.     case "varchar":
  17.      $dataType = SQLVARCHAR;
  18.      break;
  19.     case "int":
  20.      $dataType = SQLINT2;
  21.      break;
  22.     case "datetime":
  23.      $dataType = SQLINT4;
  24.      break;
  25.     case "text":
  26.      $dataType = SQLTEXT;
  27.      break;
  28.     case "money":
  29.      $dataType = SQLFLT8;
  30.      break;
  31.     default: throw new WebException("DbMsSql.CreateParameter: nieznany identyfikator typu");
  32.    }
  33.   
  34.    switch ($inout)
  35.             {
  36.                 case "in": $parmOutput = false; 
  37.       if($maxLength > 0)  
  38.        mssql_bind($spObj,$name,$initialValue,$dataType,false, $parmNull, $maxLength); 
  39.       else
  40.        mssql_bind($spObj,$name,$initialValue,$dataType,false, $parmNull); 
  41.      break;
  42.                 case "out": $parmOutput = true; 
  43.      mssql_bind($spObj,$name,&$initialValue,$dataType,true); 
  44.      break;
  45.                 default: throw new WebException("DbMsSql.CreateParameter: nieznany identyfikator inout");
  46.             }
  47.   
  48.   
  49.   }
  50.   else{
  51.    throw new WebException("Błąd tworzenia parametru do stored procedure. Nie przekazano obiektu inicja
    lizacyjnego procedurę! Nazwa parametru:"
    .$name);
  52.   }
  53.   
  54. }
  55. public function initStoredProcedure($procedureName){
  56.   $res = @mssql_init($procedureName,$this->ConnId);
  57.   
  58.   return($res); 
  59. }
  60.  
  61. public function execute(&$procObj) {
  62.   $this->QueryId = @mssql_execute($procObj);
  63.  
  64.   if($this->QueryId){
  65.    return $this->QueryId;
  66.   }
  67.   else{
  68.    throw new WebException("Nie można wykonać procedury! DbMsSql.execute".mssql_get_last_message());
  69.    return(null);
  70.   }
  71. }
  72.  
  73. ?>



Wywołanie tego wszystkiego wyglada następująco:
  1. <?php
  2.  
  3. $spObj = $this->objDb->initStoredProcedure("u_grupyUzytkownicy_AddRecord_usp");
  4.   $this->objDb->createParameter($spObj, "@grp_id", "int", "out", $grupaId);
  5.   $this->objDb->createParameter($spObj, "@grp_nazwa", "varchar", "in", $grp_nazwa);
  6.  
  7.   
  8.   $this->objDb->execute($spObj);
  9.  
  10.   echo $grupaId;
  11.  
  12. ?>


dla jasności "$this->objDb" - obiekt bazodanowy

Pozdrawiam

poprawiam
---
nospor
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.