sqlsrv_fetch_array

下載 PHP 驅動程式

將下一個資料列擷取為數值索引陣列和 (或) 關聯陣列。

語法

  
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

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

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

傳回值

如果擷取資料列,則會傳回 陣列 。 如果沒有更多資料列可擷取,則會傳回 null 。 若發生錯誤,將會傳回 false

根據 $fetchType 參數的值,傳回的 陣列 可以是數值索引 陣列和 (或) 關聯 陣列。 根據預設,會傳回同時具有數值和關聯索引鍵的 陣列 。 傳回之陣列中的資料類型值,將是預設的 PHP 資料類型。 如需有關預設 PHP 資料類型的詳細資訊,請參閱 Default PHP Data Types

備註

如果傳回沒有名稱的資料行,則陣列元素的關聯索引鍵會是空字串 ("")。 例如,請考量下列將值插入資料庫資料表中,並擷取伺服器產生之主索引鍵的 Transact-SQL 陳述式:

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

如果以關聯陣列的形式擷取此陳述式之 SELECT SCOPE_IDENTITY() 部分所傳回的結果集,傳回值的索引鍵將會是空字串 (""),因為傳回的資料行沒有名稱。 若要避免此狀況,您可以用數值陣列的形式擷取結果,或是在 Transact-SQL 陳述式中為傳回的資料行指定名稱。 下列陳述式是在 Transact-SQL 中指定資料行名稱的其中一種方式:

SELECT SCOPE_IDENTITY() AS PictureID

如果結果集包含多個沒有名稱的資料行,則最後一個未命名資料行的值將會指派給空字串 ("") 索引鍵。

關聯陣列範例

下列範例會以關聯 陣列的形式擷取結果集的每個資料列。 此範例假設本機電腦上已安裝 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);  
?>  

索引陣列範例

下列範例會以數值索引陣列的形式擷取結果集的每個資料列。

範例會針對具有指定的日期,以及存貨數量 (StockQty) 小於指定值的產品,從 AdventureWorks 資料庫的 Purchasing.PurchaseOrderDetail 資料表中擷取產品資訊。

此範例假設本機電腦上已安裝 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));  
}  
  
/* Define the query. */  
$tsql = "SELECT ProductID,  
                UnitPrice,  
                StockedQty   
         FROM Purchasing.PurchaseOrderDetail  
         WHERE StockedQty < 3   
         AND DueDate='2002-01-29'";  
  
/* Execute the query. */  
$stmt = sqlsrv_query( $conn, $tsql);  
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.*/  
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC))  
{  
     echo "ProdID: ".$row[0]."\n";  
     echo "UnitPrice: ".$row[1]."\n";  
     echo "StockedQty: ".$row[2]."\n";  
     echo "-----------------\n";  
}  
  
/* Free statement and connection resources. */  
sqlsrv_free_stmt( $stmt);  
sqlsrv_close( $conn);  
?>  

sqlsrv_fetch_array 函式一律會根據預設 PHP 資料類型傳回資料。 如需如何指定 PHP 資料類型的相關資訊,請參閱如何:指定 PHP 資料類型

如果擷取沒有名稱的欄位,則陣列元素的關聯索引鍵會是空字串 ("")。 如需詳細資訊,請參閱 sqlsrv_fetch_array

另請參閱

SQLSRV 驅動程式 API 參考

擷取資料

關於文件中的程式碼範例

Microsoft Drivers for PHP for SQL Server 的程式設計指南