sqlsrv_fetch_object

Pobieranie sterownika PHP

Pobiera następny wiersz danych jako obiekt PHP.

Syntax

sqlsrv_fetch_object( resource $stmt [, string $className [, array $ctorParams[, row[, ]offset]]])  

Parametry

$stmt: Zasób instrukcji odpowiadający wykonanemu zawołaniu.

$className [OPCJONALNIE]: Ciąg określający nazwę klasy do instancji. Jeśli wartość parametru $className nie jest określona, instancja klasy stdClass PHP jest instancjonowana.

$ctorParams [OPCJONALNE]: Tablica zawierająca wartości przekazywane konstruktorowi klasy określonej parametrem $className . Jeśli konstruktor określonej klasy akceptuje wartości parametrów, parametr $ctorParams musi być użyty przy wywoływaniu sqlsrv_fetch_object.

wiersz [OPCJONALNIE]: Jedna z następujących wartości, określająca wiersz do dostępu w zbiorze wyników wykorzystującym przewijany kursor. (Jeśli wiersz jest określony, $className i $ctorParams muszą być wyraźnie określone, nawet jeśli trzeba określić null dla $className i $ctorParams.)

  • SQLSRV_SCROLL_NEXT

  • SQLSRV_SCROLL_PRIOR

  • SQLSRV_SCROLL_FIRST

  • SQLSRV_SCROLL_LAST

  • SQLSRV_SCROLL_ABSOLUTE

  • SQLSRV_SCROLL_RELATIVE

Więcej informacji o tych wartościach można znaleźć w sekcji Określanie typu kursora oraz Wybieranie wierszy.

offset [OPCJONALNIE]: Używany z SQLSRV_SCROLL_ABSOLUTE i SQLSRV_SCROLL_RELATIVE do określenia wiersza do pobrania. Pierwszy rekord w zestawie wyników to 0.

Wartość zwracana

Obiekt PHP o właściwościach odpowiadających nazwam pól zbioru wyników. Wartości właściwości są wypełniane odpowiednimi wartościami pól zbioru wyników. Jeśli klasa określona z opcjonalnym parametrem $className nie istnieje lub nie ma aktywnego zbioru wyników powiązanego z podanym zdaniem, zwraca się fałszywe . Jeśli nie ma już więcej wierszy do pobrania, zwraca się null .

Typ danych wartości w zwróconym obiekcie będzie domyślnym typem danych PHP. Aby uzyskać informacje o domyślnych typach danych PHP, zobacz Domyślne typy danych PHP.

Remarks

Jeśli nazwa klasy zostanie podana opcjonalnym parametrem $className , obiekt tego typu klasy jest instancjonowany. Jeśli klasa ma właściwości, których nazwy odpowiadają nazwam pól zbioru wyników, odpowiadające wartości zbioru wyników są przypisywane do tych właściwości. Jeśli nazwa pola zbioru wyników nie odpowiada własności klasy, do obiektu dodaje się właściwość o nazwie pola zbioru wyników, a wartość zbioru wynikowego jest przypisana do tej właściwości.

Następujące zasady obowiązują przy określaniu klasy z parametrem $className :

  • Dopasowanie uwzględnia wielkość liter. Na przykład nazwa właściwości CustomerId nie zgadza się z nazwą pola CustomerID. W takim przypadku do obiektu dodana byłaby właściwość CustomerID, a wartość pola CustomerID przypisana by do właściwości CustomerID.

  • Dopasowywanie następuje niezależnie od modyfikatorów dostępu. Na przykład, jeśli określona klasa ma własność prywatną, której nazwa odpowiada nazwie pola zbioru wyników, wartość z pola zbioru wyników jest przypisana do tej własności.

  • Typy danych właściwości klasowych są ignorowane. Jeśli pole "CustomerID" w zbiorze wyników jest ciągiem ciągów, ale własnością klasy "CustomerID" jest liczbą całkowitą, wartość ciągu z tego zbioru jest zapisywana do właściwości "CustomerID".

  • Jeśli podana klasa nie istnieje, funkcja zwraca false i dodaje błąd do kolekcji błędów. Aby uzyskać informacje o odzyskaniu błędów, zobacz sqlsrv_errors.

Jeśli pole bez nazwy zostanie zwrócone, sqlsrv_fetch_object odrzuca wartość pola i wyświetli ostrzeżenie. Na przykład rozważmy to Transact-SQL zdanie, które wstawia wartość do tabeli bazy danych i pobiera klucz główny generowany przez serwer:

INSERT INTO Production.ProductPhoto (LargePhoto) VALUES (?);  
SELECT SCOPE_IDENTITY()

Jeśli wyniki zwrócone przez to zapytanie zostaną pobrane z sqlsrv_fetch_object, wartość zwrócona przez SELECT SCOPE_IDENTITY() zostanie odrzucona, a zostanie wydane ostrzeżenie. Aby tego uniknąć, możesz określić nazwę pola zwracanego w instrukcji Transact-SQL. Poniżej znajduje się jeden ze sposobów określenia nazwy kolumny w Transact-SQL:

SELECT SCOPE_IDENTITY() AS PictureID

Przykład obiektu

Poniższy przykład pobiera każdy wiersz zbioru wyników jako obiekt PHP. Przykład zakłada, że SQL Server i baza danych AdventureWorks są zainstalowane na komputerze lokalnym. Wszystkie dane wyjściowe są zapisywane w konsoli, gdy przykład jest uruchamiany z wiersza polecenia.

<?php  
/* Connect to the local server using Windows Authentication and  
specify the AdventureWorks database as the database in use. */  
$serverName = "(local)";  
$connectionInfo = array( "Database"=>"AdventureWorks");  
$conn = sqlsrv_connect( $serverName, $connectionInfo);  
if( $conn === false )  
{  
     echo "Could not connect.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Set up and execute the query. */  
$tsql = "SELECT FirstName, LastName  
         FROM Person.Contact  
         WHERE LastName='Alan'";  
$stmt = sqlsrv_query( $conn, $tsql);  
if( $stmt === false )  
{  
     echo "Error in query preparation/execution.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Retrieve each row as a PHP object and display the results.*/  
while( $obj = sqlsrv_fetch_object( $stmt))  
{  
      echo $obj->LastName.", ".$obj->FirstName."\n";  
}  
  
/* Free statement and connection resources. */  
sqlsrv_free_stmt( $stmt);  
sqlsrv_close( $conn);  
?>  

Przykład klasy

Poniższy przykład pobiera każdy wiersz zbioru wyników jako instancję klasy produktu zdefiniowanej w skrypcie. Przykład pobiera informacje o produktach z tabel Purchasing.PurchaseOrderDetail oraz Production.Product bazy danych AdventureWorks dla produktów z określonym terminem (Data dostarczenia) oraz ilością magazynowaną (StockQty) mniejszą niż określona wartość. Przykład podkreśla niektóre reguły obowiązujące przy określaniu klasy w wywołaniu sqlsrv_fetch_object:

  • Zmienna $product jest instancją klasy Produktu , ponieważ "Product" został określony parametrem $className i klasa Product istnieje.

  • Właściwość Nazwa jest dodawana do $product instancji, ponieważ istniejąca własność nazwy nie pasuje.

  • Właściwość Kolor jest dodawana do $product instancji, ponieważ nie ma właściwości dopasowania.

  • Prywatna własność UnitPrice jest wypełniona wartością pola UnitPrice .

W tym przykładzie przyjęto założenie, że na komputerze lokalnym zainstalowano program SQL Server i bazę danych AdventureWorks . Wszystkie dane wyjściowe są zapisywane w konsoli, gdy przykład jest uruchamiany z wiersza polecenia.

<?php  
/* Define the Product class. */  
class Product  
{  
     /* Constructor */  
     public function Product($ID)  
     {  
          $this->objID = $ID;  
     }  
     public $objID;  
     public $name;  
     public $StockedQty;  
     public $SafetyStockLevel;  
     private $UnitPrice;  
     function getPrice()  
     {  
          return $this->UnitPrice;  
     }  
}  
  
/* Connect to the local server using Windows Authentication, and  
specify the AdventureWorks database as the database in use. */  
$serverName = "(local)";  
$connectionInfo = array( "Database"=>"AdventureWorks");  
$conn = sqlsrv_connect( $serverName, $connectionInfo);  
if( $conn === false )  
{  
     echo "Could not connect.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Define the query. */  
$tsql = "SELECT Name,  
                SafetyStockLevel,  
                StockedQty,  
                UnitPrice,  
                Color  
         FROM Purchasing.PurchaseOrderDetail AS pdo  
         JOIN Production.Product AS p  
         ON pdo.ProductID = p.ProductID  
         WHERE pdo.StockedQty < ?  
         AND pdo.DueDate= ?";  
  
/* Set the parameter values. */  
$params = array(3, '2002-01-29');  
  
/* Execute the query. */  
$stmt = sqlsrv_query( $conn, $tsql, $params);  
if ( $stmt )  
{  
     echo "Statement executed.\n";  
}   
else   
{  
     echo "Error in statement execution.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Iterate through the result set, printing a row of data upon each  
 iteration. Note the following:  
     1) $product is an instance of the Product class.  
     2) The $ctorParams parameter is required in the call to  
        sqlsrv_fetch_object, because the Product class constructor is  
        explicitly defined and requires parameter values.  
     3) The "Name" property is added to the $product instance because  
        the existing "name" property does not match.  
     4) The "Color" property is added to the $product instance  
        because there is no matching property.  
     5) The private property "UnitPrice" is populated with the value  
        of the "UnitPrice" field.*/  
$i=0; //Used as the $objID in the Product class constructor.  
while( $product = sqlsrv_fetch_object( $stmt, "Product", array($i)))  
{  
     echo "Object ID: ".$product->objID."\n";  
     echo "Product Name: ".$product->Name."\n";  
     echo "Stocked Qty: ".$product->StockedQty."\n";  
     echo "Safety Stock Level: ".$product->SafetyStockLevel."\n";  
     echo "Product Color: ".$product->Color."\n";  
     echo "Unit Price: ".$product->getPrice()."\n";  
     echo "-----------------\n";  
     $i++;  
}  
  
/* Free statement and connection resources. */  
sqlsrv_free_stmt( $stmt);  
sqlsrv_close( $conn);  
?>  

Funkcja sqlsrv_fetch_object zawsze zwraca dane zgodnie z domyślnymi typami danych PHP. Aby uzyskać informacje o tym, jak określić typ danych PHP, zobacz: Jak określić typy danych PHP.

Jeśli pole bez nazwy zostanie zwrócone, sqlsrv_fetch_object odrzuca wartość pola i wyświetli ostrzeżenie. Na przykład rozważmy to Transact-SQL zdanie, które wstawia wartość do tabeli bazy danych i pobiera klucz główny generowany przez serwer:

INSERT INTO Production.ProductPhoto (LargePhoto) VALUES (?);  
SELECT SCOPE_IDENTITY()

Jeśli wyniki zwrócone przez to zapytanie zostaną pobrane z sqlsrv_fetch_object, wartość zwrócona przez SELECT SCOPE_IDENTITY() zostanie odrzucona, a zostanie wydane ostrzeżenie. Aby tego uniknąć, możesz określić nazwę pola zwracanego w instrukcji Transact-SQL. Poniżej znajduje się jeden ze sposobów określenia nazwy kolumny w Transact-SQL:

SELECT SCOPE_IDENTITY() AS PictureID