sqlsrv_fetch_object
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