共用方式為


sqlsrv_fetch_object

將下一個資料列當做 PHP 物件來擷取。

語法

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

參數

$stmt:對應到執行之陳述式的陳述式資源。

$className [選擇性]:指定要具現化之類別名稱的字串。如果未指定 $className 參數的值,就會具現化 PHP stdClass 的執行個體。

$ctorParams [選擇性]:陣列,其中包含的值會傳遞給類別的建構函式,此類別是使用 $className 參數所指定。如果指定之類別的建構函式可接受參數值,則在呼叫 sqlsrv_fetch_object 時必須使用 $ctorParams 參數。

row [選擇性]:在 1.1 版中新增。下列其中一個值,指定要在使用可捲動資料指標的結果集中存取的資料列 (如果指定了 row,就必須明確指定 $className$ctorParams,即使您必須針對 $className$ctorParams 指定 Null 也一樣)。

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

如需有關這些值的詳細資訊,請參閱<指定資料指標類型和選取資料列>。SQL Server Driver for PHP 1.1 版新增了可捲動資料指標的支援。

offset [選擇性]:搭配 SQLSRV_SCROLL_ABSOLUTE 和 SQLSRV_SCROLL_RELATIVE 使用,以便指定要擷取的資料列。結果集中的第一個記錄是 0。

傳回值

PHP 物件,其中包含對應至結果集欄位名稱的屬性。屬性值中會填入對應的結果集欄位值。如果使用選擇性 $className 參數指定的類別並不存在,或是沒有使用中的結果集與指定的陳述式有關聯,便會傳回 false。如果沒有其他資料列要擷取,就會傳回 null

傳回之物件中的值資料類型將會是預設 PHP 資料類型。如需有關預設 PHP 資料類型的資訊,請參閱<預設 PHP 資料類型>。

備註

如果使用選擇性 $className 參數來指定類別名稱,便會具現化此類別類型的物件。如果此類別的屬性名稱符合結果集欄位名稱,對應的結果集值便會套用到屬性。如果結果集欄位名稱不符合類別屬性,具有結果集欄位名稱的屬性便會加入到物件中,而且結果集值會套用到此屬性。如需有關使用 $className 參數呼叫 sqlsrv_fetch_object 的詳細資訊,請參閱<如何:將資料當做物件擷取>。

如果傳回了沒有名稱的欄位,sqlsrv_fetch_object 將會捨棄欄位值,並發出警告。例如,假設這個 Transact-SQL 陳述式會將值插入資料庫資料表,並擷取伺服器產生的主索引鍵:

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

SELECT SCOPE_IDENTITY()

如果使用 sqlsrv_fetch_object 來擷取此查詢所傳回的結果,將會捨棄 SELECT SCOPE_IDENTITY() 傳回的值,而且會發出警告。為了避免這個狀況,您可以針對 Transact-SQL 陳述式內傳回的欄位指定名稱。下列是在 Transact-SQL 內指定資料行名稱的一個方法:

SELECT SCOPE_IDENTITY() AS PictureID

範例

下列範例會將結果集的每一個資料列當做 PHP 物件來擷取。下列範例假設 SQL Server 和 AdventureWorks 資料庫已經安裝在本機電腦上。當從命令列執行此範例時,所有輸出都會寫入主控台。

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

另請參閱

概念

比較資料擷取函數
有關文件集中的程式碼範例

其他資源

擷取資料
API 參考 (SQL Server Driver for PHP)