sqlsrv_fetch_array
以 array 的形式擷取下一個資料列。
語法
sqlsrv_fetch_array( resource $stmt[, int $fetchType [, row[, ]offset]])
參數
$stmt:對應到執行之陳述式的陳述式資源。
$fetchType [選擇性]:預先定義的常數。這個參數可以接受下表列出的其中一個值:
値 | 描述 |
---|---|
SQLSRV_FETCH_NUMERIC |
當做數值陣列傳回的下一個資料列。 |
SQLSRV_FETCH_ASSOC |
當做關聯陣列傳回的下一個資料列。陣列索引鍵是結果集內的資料行名稱。 |
SQLSRV_FETCH_BOTH |
當做數值陣列和關聯陣列傳回的下一個資料列。這是預設值。 |
row [選擇性]:在 1.1 版中新增。下列其中一個值,指定要在使用可捲動資料指標的結果集中存取的資料列 (如果指定了 row,就必須明確指定 fetchtype,即使您指定了預設值也一樣)。
- 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。
傳回值
如果擷取資料列,就會傳回 array。如果沒有其他資料列要擷取,就會傳回 null。如果發生錯誤,就會傳回 false。
根據 $fetchType 參數的值,傳回的 array 可以是數值索引 array、關聯 array 或這兩者。預設會傳回具有數值和關聯索引鍵的 array。傳回之陣列中的值資料類型將會是預設 PHP 資料類型。如需有關預設 PHP 資料類型的資訊,請參閱<預設 PHP 資料類型>。
備註
如果傳回沒有名稱的資料行,陣列元素的關聯索引鍵將會是空字串 ("")。例如,假設這個 Transact-SQL 陳述式會將值插入資料庫資料表,並擷取伺服器產生的主索引鍵:
INSERT INTO Production.ProductPhoto (LargePhoto) VALUES (?);
SELECT SCOPE_IDENTITY()
如果此陳述式的 SELECT SCOPE_IDENTITY()
部分所傳回的結果集會當做關聯陣列來擷取,傳回之值的索引鍵將會是空字串 (""),因為傳回的資料行沒有名稱。為了避免這個狀況,您可以利用數值陣列的方式擷取結果,或是針對 Transact-SQL 陳述式內傳回的資料行指定名稱。下列是在 Transact-SQL 內指定資料行名稱的一個方法:
SELECT SCOPE_IDENTITY() AS PictureID
如果結果集包含多個沒有名稱的資料行,最後一個未命名之資料行的值將會指派給空字串 ("") 索引鍵。
範例
下列範例會以關聯 array 的形式擷取結果集的每一個資料列。下列範例假設 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 an associative array and display the results.*/
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
{
echo $row['LastName'].", ".$row['FirstName']."\n";
}
/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>