共用方式為


如何:使用 SQLSRV 驅動程式以資料流形式擷取二進位資料

下載 PHP 驅動程式

擷取串流資料僅適用於 Microsoft Drivers for PHP for SQL Server 的 SQLSRV 驅動程式,而不適用於 PDO_SQLSRV 驅動程式。

Microsoft Drivers for PHP for SQL Server 利用 PHP 串流從伺服器擷取大量的二進位資料。 本主題示範如何以資料流形式擷取資料。

使用資料流來擷取二進位資料 (例如影像),可避免使用大量的指令碼記憶體,其作法是擷取資料區塊,而非將整個物件載入指令碼記憶體中。

範例

下列範例會從 AdventureWorks 資料庫的 Production.ProductPhoto 資料表擷取二進位資料 (在此案例中是影像)。 影像會擷取為資料流並顯示在瀏覽器中。

使用 sqlsrv_fetchsqlsrv_get_field 搭配指定為二進位資料流的傳回類型,即可完成以資料流形式擷取影像資料。 使用常數 SQLSRV_PHPTYPE_STREAM 可指定傳回型別。 如需 sqlsrv 常數的資訊,請參閱常數 (Microsoft Drivers for PHP for SQL Server)

此範例假設本機電腦上已安裝 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 the Transact-SQL query. */  
$tsql = "SELECT LargePhoto   
         FROM Production.ProductPhoto   
         WHERE ProductPhotoID = ?";  
  
/* Set the parameter values and put them in an array. */  
$productPhotoID = 70;  
$params = array( $productPhotoID);  
  
/* Execute the query. */  
$stmt = sqlsrv_query($conn, $tsql, $params);  
if( $stmt === false )  
{  
     echo "Error in statement execution.</br>";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Retrieve and display the data.  
The return data is retrieved as a binary stream. */  
if ( sqlsrv_fetch( $stmt ) )  
{  
   $image = sqlsrv_get_field( $stmt, 0,   
                      SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY));  
   header("Content-Type: image/jpg");  
   fpassthru($image);  
}  
else  
{  
     echo "Error in retrieving data.</br>";  
     die(print_r( sqlsrv_errors(), true));  
}  
  
/* Free statement and connection resources. */  
sqlsrv_free_stmt( $stmt);  
sqlsrv_close( $conn);  
?>  

在範例中指定傳回類型,可示範如何將 PHP 傳回類型指定為二進位資料流。 技術上來說,不一定要在範例中,因為 LargePhoto 欄位具有 SQL Server 類型 varbinary(max),因此預設會以二進位資料流形式傳回。 如需有關預設 PHP 資料類型的詳細資訊,請參閱 Default PHP Data Types。 如需有關如何指定 PHP 傳回類型的詳細資訊,請參閱 How to: Specify PHP Data Types

另請參閱

擷取資料

使用 SQLSRV 驅動程式以資料流形式擷取資料

關於文件中的程式碼範例