sqlsrv_fetch_object

PHP sürücüsünü indirme

Bir sonraki veri satırını PHP nesnesi olarak alır.

Syntax

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

Parametreler

$stmt: Yürütülmüş bir ifadeye karşılık gelen bir ifade kaynağı.

$className [ISTEĞE BAĞLI]: Örneklenecek sınıfın adını belirten bir dizidir. $className parametresi için bir değer belirtilmemişse, PHP stdClass'ın bir örneği oluşturulur.

$ctorParams [ISTEĞE BAĞLI]: $className parametresiyle belirtilen sınıfın üreticisine gönderilen değerleri içeren bir dizi. Belirtilen sınıfın üreticisi parametre değerlerini kabul ediyorsa, sqlsrv_fetch_object çağrılırken $ctorParams parametresi kullanılmalıdır.

satırı [ISTEĞE BAĞLI]: Aşağıdaki değerlerden biri, kaydırılabilir bir imleç kullanan bir sonuç kümesinde erişilecek satırı belirtir. (Eğer satır belirtilmişse, $className ve $ctorParams için null belirtmeniz gerekse bile, $className ve $ctorParams açıkça belirtilmelidir.)

  • SQLSRV_SCROLL_NEXT

  • SQLSRV_SCROLL_PRIOR

  • SQLSRV_SCROLL_FIRST

  • SQLSRV_SCROLL_LAST

  • SQLSRV_SCROLL_ABSOLUTE

  • SQLSRV_SCROLL_RELATIVE

Bu değerler hakkında daha fazla bilgi için Bir İmleç Tipi Belirtme ve Satır Seçme bölümlerine bakınız.

ofset [OPTIONAL]: SQLSRV_SCROLL_ABSOLUTE ve SQLSRV_SCROLL_RELATIVE ile birlikte alınacak satırı belirtmek için kullanılır. Sonuç setindeki ilk kayıt 0'dır.

Dönüş Değeri

Sonuç kümesi alan adlarına karşılık gelen özelliklere sahip bir PHP nesnesi. Özellik değerleri, karşılık gelen sonuç kümesi alan değerleriyle doldurulur. Eğer isteğe bağlı $className parametresiyle belirtilen sınıf mevcut değilse veya belirtilen ifadeyle ilişkili aktif sonuç kümesi yoksa, false döner. Geri alınacak başka satır kalmazsa, null döner.

Geri dönen nesnedeki bir değerin veri tipi, varsayılan PHP veri tipi olacaktır. Varsayılan PHP veri tipleri hakkında bilgi için Varsayılan PHP Veri Türleri sayfasına bakınız.

Remarks

Bir sınıf adı isteğe bağlı $className parametresiyle belirtilirse, bu sınıf tipinde bir nesne örneklenir. Sınıfın adları sonuç kümesi alan adlarıyla eşleşen özelliklere sahipse, ilgili sonuç kümesi değerleri bu özelliklere uygulanır. Sonuçküme alan adı bir sınıf özelliğiyle eşleşmiyorsa, sonuç kümesi alan adına sahip bir özellik nesneye eklenir ve sonuç kümesi değeri bu özelliğe uygulanır.

$className parametresine sahip bir sınıf belirlerken aşağıdaki kurallar geçerlidir:

  • Eşleştirme büyük/küçük harfe duyarlıdır. Örneğin, CustomerId adlı mülk adı CustomerID alan adıyla eşleşmez. Bu durumda, nesneye bir CustomerID özelliği eklenir ve CustomerID alanının değeri CustomerID özelliğine verilir.

  • Eşleşme, erişim değiştiricilerinden bağımsız olarak gerçekleşir. Örneğin, belirtilen sınıfın bir özel özelliği ve adı bir sonuç kümesi alanı adıyla eşleşiyorsa, sonuç kümesi alanındaki değer bu özelliğe uygulanır.

  • Sınıf özellik veri türleri göz ardı edilir. Eğer sonuç kümesindeki "CustomerID" alanı bir diziye ancak sınıfın "CustomerID" özelliği tam sayıysa, sonuç kümesinden alınan dize değeri "CustomerID" özelliğine yazılır.

  • Belirtilen sınıf yoksa, fonksiyon yanlış döndürür ve hata koleksiyonuna bir hata ekler. Hata bilgisi alınma hakkında bilgi için bkz. sqlsrv_errors.

İsimsiz bir alan dönerse, sqlsrv_fetch_object alan değerini atır ve uyarı verir. Örneğin, bir veritabanı tablosuna bir değer ekleyen ve sunucu tarafından oluşturulan birincil anahtarı geri alan şu Transact-SQL ifadesini ele alalım:

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

Bu sorgu ile verilen sonuçlar sqlsrv_fetch_object ile alınırsa, döndürülen SELECT SCOPE_IDENTITY() değer atılır ve uyarı verilir. Bunu önlemek için, Transact-SQL ifadesinde geri dönen alan için bir isim belirtebilirsiniz. Transact-SQL'de bir sütun adını belirtmenin bir yolu aşağıda verilmiştir:

SELECT SCOPE_IDENTITY() AS PictureID

Nesne örneği

Aşağıdaki örnek, bir sonuç kümesinin her satırını bir PHP nesnesi olarak alır. Örnek, SQL Server ve AdventureWorks veritabanının yerel bilgisayara yüklendiğini varsayıyor. Örnek komut satırından çalıştırıldığında tüm çıkış konsola yazılır.

<?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);  
?>  

Sınıf örneği

Aşağıdaki örnek, bir sonuç kümesinin her satırını scriptte tanımlanan Ürün sınıfının bir örneği olarak alır. Örnek, belirli bir son teslim tarihi (Due Date) ve stok miktarı (StockQty) belirtilen değerden küçük olan ürünler için AdventureWorks veritabanındaki Purchasing.PurchaseOrderDetail ve Production.Product tablolarından ürün bilgilerini alır. Örnek, sqlsrv_fetch_object çağrısında bir sınıf belirlerken uygulanan bazı kuralları vurgular:

  • $product değişken, Ürün sınıfının bir örneğidir, çünkü "Ürün" $className parametresiyle belirtilmiş ve Ürün sınıfı mevcuttur.

  • Adı özelliği, mevcut isim özelliği eşleşmediği için $product örneğine eklenir.

  • Color özelliği, eşleşen bir özellik olmadığı için $product örneğine eklenir.

  • Özel mülk UnitPrice , UnitPrice alanının değeriyle doldurulur.

Örnekte SQL Server ve AdventureWorks veritabanının yerel bilgisayarda yüklü olduğu varsayılır. Örnek komut satırından çalıştırıldığında tüm çıkış konsola yazılır.

<?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);  
?>  

sqlsrv_fetch_object fonksiyonu her zaman Varsayılan PHP Veri Türlerine göre veri döndürür. PHP veri tipini nasıl belirteceği hakkında bilgi için bkz. Nasıl yapılır: PHP Veri Tiplerini Belirt.

İsimsiz bir alan dönerse, sqlsrv_fetch_object alan değerini atır ve uyarı verir. Örneğin, bir veritabanı tablosuna bir değer ekleyen ve sunucu tarafından oluşturulan birincil anahtarı geri alan şu Transact-SQL ifadesini ele alalım:

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

Bu sorgu ile verilen sonuçlar sqlsrv_fetch_object ile alınırsa, döndürülen SELECT SCOPE_IDENTITY() değer atılır ve uyarı verilir. Bunu önlemek için, Transact-SQL ifadesinde geri dönen alan için bir isim belirtebilirsiniz. Transact-SQL'de bir sütun adını belirtmenin bir yolu aşağıda verilmiştir:

SELECT SCOPE_IDENTITY() AS PictureID