Bagikan melalui


sqlsrv_fetch_object

Unduh driver PHP

Mengambil baris data berikutnya sebagai objek PHP.

Sintaks

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

Parameter

$stmt: Sumber daya pernyataan yang sesuai dengan pernyataan yang dijalankan.

$className [OPSIONAL]: String yang menentukan nama kelas yang akan diinstansiasi. Jika nilai untuk parameter $className tidak ditentukan, instans PHP stdClass dibuat.

$ctorParams [OPSIONAL]: Array yang berisi nilai yang diteruskan ke konstruktor kelas yang ditentukan dengan parameter $className. Jika konstruktor kelas yang ditentukan menerima nilai parameter, parameter $ctorParams harus digunakan saat memanggil sqlsrv_fetch_object.

baris [OPSIONAL]: Salah satu nilai berikut, menentukan baris untuk diakses dalam tataan hasil yang menggunakan kursor yang dapat digulir. (Jika baris ditentukan, $className dan $ctorParams harus ditentukan secara eksplisit, bahkan jika Anda harus menentukan null untuk $className dan $ctorParams.)

  • SQLSRV_SCROLL_NEXT

  • SQLSRV_SCROLL_PRIOR

  • SQLSRV_SCROLL_FIRST

  • SQLSRV_SCROLL_LAST

  • SQLSRV_SCROLL_ABSOLUTE

  • SQLSRV_SCROLL_RELATIVE

Untuk informasi selengkapnya tentang nilai-nilai ini, lihat Menentukan Jenis Kursor dan Memilih Baris.

offset [OPSIONAL]: Digunakan dengan SQLSRV_SCROLL_ABSOLUTE dan SQLSRV_SCROLL_RELATIVE untuk menentukan baris yang akan diambil. Catatan pertama dalam tataan hasil adalah 0.

Tampilkan Nilai

Objek PHP dengan properti yang sesuai dengan nama bidang tataan hasil. Nilai properti diisi dengan nilai bidang tataan hasil yang sesuai. Jika kelas yang ditentukan dengan parameter $className opsional tidak ada atau jika tidak ada kumpulan hasil aktif yang terkait dengan pernyataan yang ditentukan, false akan dikembalikan. Jika tidak ada lagi baris untuk diambil, null dikembalikan.

Jenis data nilai dalam objek yang dikembalikan akan menjadi jenis data PHP default. Untuk informasi tentang jenis data PHP default, lihat Jenis Data PHP Default.

Keterangan

Jika nama kelas ditentukan dengan parameter $className opsional, objek dari jenis kelas ini dibuat. Jika kelas memiliki properti yang namanya cocok dengan nama bidang kumpulan hasil, nilai tataan hasil terkait diterapkan ke properti. Jika nama bidang kumpulan hasil tidak cocok dengan properti kelas, properti dengan nama bidang kumpulan hasil ditambahkan ke objek dan nilai tataan hasil diterapkan ke properti .

Aturan berikut berlaku saat menentukan kelas dengan parameter $className :

  • Pencocokan peka huruf besar/kecil. Misalnya, nama properti CustomerId tidak cocok dengan nama bidang CustomerID. Dalam hal ini, properti CustomerID akan ditambahkan ke objek dan nilai bidang CustomerID akan diberikan ke properti CustomerID.

  • Pencocokan terjadi terlepas dari pengubah akses. Misalnya, jika kelas yang ditentukan memiliki properti privat yang namanya cocok dengan nama bidang kumpulan hasil, nilai dari bidang kumpulan hasil diterapkan ke properti .

  • Jenis data properti kelas diabaikan. Jika bidang "CustomerID" dalam tataan hasil adalah string tetapi properti "CustomerID" kelas adalah bilangan bulat, nilai string dari kumpulan hasil ditulis ke properti "CustomerID".

  • Jika kelas yang ditentukan tidak ada, fungsi mengembalikan false dan menambahkan kesalahan ke kumpulan kesalahan. Untuk informasi tentang mengambil informasi kesalahan, lihat sqlsrv_errors.

Jika bidang tanpa nama dikembalikan, sqlsrv_fetch_object akan membuang nilai bidang dan mengeluarkan peringatan. Misalnya, pertimbangkan pernyataan Transact-SQL ini yang menyisipkan nilai ke dalam tabel database dan mengambil kunci primer yang dihasilkan server:

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

Jika hasil yang dikembalikan oleh kueri ini diambil dengan sqlsrv_fetch_object, nilai yang dikembalikan oleh SELECT SCOPE_IDENTITY() akan dibuang dan peringatan akan dikeluarkan. Untuk menghindari hal ini, Anda dapat menentukan nama untuk bidang yang dikembalikan dalam pernyataan Transact-SQL. Berikut ini adalah salah satu cara untuk menentukan nama kolom di Transact-SQL:

SELECT SCOPE_IDENTITY() AS PictureID

Contoh objek

Contoh berikut mengambil setiap baris hasil yang ditetapkan sebagai objek PHP. Contoh mengasumsikan bahwa SQL Server dan database AdventureWorks diinstal di komputer lokal. Semua output ditulis ke konsol saat contoh dijalankan dari baris perintah.

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

Contoh kelas

Contoh berikut mengambil setiap baris hasil yang ditetapkan sebagai instans kelas Produk yang ditentukan dalam skrip. Contoh mengambil informasi produk dari tabel Purchasing.PurchaseOrderDetail dan Production.Product database AdventureWorks untuk produk yang memiliki tanggal jatuh tempo (DueDate) tertentu, dan jumlah stok (StockQty) kurang dari nilai yang ditentukan. Contoh menyoroti beberapa aturan yang berlaku saat menentukan kelas dalam panggilan ke sqlsrv_fetch_object:

  • Variabel $product adalah instans kelas Produk , karena "Produk" ditentukan dengan parameter $className dan kelas Produk ada.

  • Properti Nama ditambahkan ke instans $product karena properti nama yang ada tidak cocok.

  • Properti Warna ditambahkan ke instans $product karena tidak ada properti yang cocok.

  • Properti privat UnitPrice diisi dengan nilai bidang UnitPrice .

Contoh mengasumsikan bahwa SQL Server dan database AdventureWorks diinstal di komputer lokal. Semua output ditulis ke konsol saat contoh dijalankan dari baris perintah.

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

Fungsi sqlsrv_fetch_object selalu mengembalikan data sesuai dengan Jenis Data PHP Default. Untuk informasi tentang cara menentukan jenis data PHP, lihat Cara: Menentukan Jenis Data PHP.

Jika bidang tanpa nama dikembalikan, sqlsrv_fetch_object akan membuang nilai bidang dan mengeluarkan peringatan. Misalnya, pertimbangkan pernyataan Transact-SQL ini yang menyisipkan nilai ke dalam tabel database dan mengambil kunci primer yang dihasilkan server:

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

Jika hasil yang dikembalikan oleh kueri ini diambil dengan sqlsrv_fetch_object, nilai yang dikembalikan oleh SELECT SCOPE_IDENTITY() akan dibuang dan peringatan akan dikeluarkan. Untuk menghindari hal ini, Anda dapat menentukan nama untuk bidang yang dikembalikan dalam pernyataan Transact-SQL. Berikut ini adalah salah satu cara untuk menentukan nama kolom di Transact-SQL:

SELECT SCOPE_IDENTITY() AS PictureID

Lihat Juga

Mengambil Data

Tentang Contoh Kode dalam Dokumentasi

Referensi API Driver SQLSRV