2024 年 PHP Conference Japan

sqlsrv_fetch_object

(沒有版本資訊,可能只在 Git 中)

sqlsrv_fetch_object將結果集中的下一列資料作為物件擷取

說明

sqlsrv_fetch_object(
    資源 $stmt,
    字串 $className = ?,
    陣列 $ctorParams = ?,
    int $row = ?,
    int $offset = ?
): mixed

將結果集中下一筆資料列作為指定類別的實例擷取,其屬性與資料列欄位名稱相符,且值對應於資料列欄位值。

參數

stmt

sqlsrv_query()sqlsrv_execute() 建立的陳述式資源。

className

要實例化的類別名稱。如果未指定類別名稱,則會實例化 stdClass。

ctorParams

傳遞給指定類別建構函式的值。如果指定類別的建構函式需要參數,則必須提供 ctorParams 陣列。

row

要存取的資料列。此參數僅在使用可捲動的游標準備指定陳述式時才能使用。在這種情況下,此參數可以採用下列其中一個值

  • SQLSRV_SCROLL_NEXT
  • SQLSRV_SCROLL_PRIOR
  • SQLSRV_SCROLL_FIRST
  • SQLSRV_SCROLL_LAST
  • SQLSRV_SCROLL_ABSOLUTE
  • SQLSRV_SCROLL_RELATIVE

offset

如果 row 參數設定為 SQLSRV_SCROLL_ABSOLUTESQLSRV_SCROLL_RELATIVE,則指定要存取的資料列。請注意,結果集中的第一列索引為 0。

傳回值

成功時傳回物件,如果沒有更多資料列要傳回,則傳回 null,如果發生錯誤或指定的類別不存在,則傳回 false

範例

範例 #1 sqlsrv_fetch_object() 範例

以下範例示範如何將資料列作為 stdClass 物件擷取。

<?php
$serverName
= "serverName\sqlexpress";
$connectionInfo = array( "Database"=>"dbName", "UID"=>"username", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if(
$conn === false ) {
die(
print_r( sqlsrv_errors(), true));
}

$sql = "SELECT fName, lName FROM Table_1";
$stmt = sqlsrv_query( $conn, $sql);
if(
$stmt === false ) {
die(
print_r( sqlsrv_errors(), true));
}

// 擷取每一列作為一個物件。
// 因為沒有指定類別,每一列將會被擷取為一個 stdClass 物件。
// 屬性名稱對應到欄位名稱。
while( $obj = sqlsrv_fetch_object( $stmt)) {
echo
$obj->fName.", ".$obj->lName."<br />";
}
?>

注意事項

如果使用選用的 $className 參數指定類別名稱,且該類別具有與結果集欄位名稱相符的屬性,則對應的結果集值將會套用到這些屬性。如果結果集欄位名稱與類別屬性不相符,則會將具有結果集欄位名稱的屬性新增至物件,並將結果集值套用到該屬性。使用 $className 參數時,以下規則適用:

  • 欄位-屬性名稱比對區分大小寫。
  • 無論存取修飾詞為何,都會進行欄位-屬性比對。
  • 將欄位值套用到屬性時,會忽略類別屬性資料類型。
  • 如果類別不存在,函式會傳回 false 並將錯誤新增至錯誤集合。
無論是否提供 $className 參數,如果傳回沒有名稱的欄位,則會忽略欄位值,並將警告新增至錯誤集合。

當處理的結果集包含多個同名欄位時,使用 sqlsrv_fetch_array()sqlsrv_fetch() 搭配 sqlsrv_get_field() 的組合可能會更好。

另請參閱

新增註記

使用者貢獻的註記

此頁面沒有使用者貢獻的註記。
To Top