次の方法で共有


方法:SQLSRV ドライバーを使用してバイナリ データをストリームとして取得する

PHP ドライバーのダウンロード

ストリームとしてのデータの取得は、Microsoft SQL Server 用 Drivers for PHP の SQLSRV ドライバーでのみ使用でき、PDO_SQLSRV ドライバーでは使用できません。

Microsoft SQL Server 用 Drivers for PHP は、サーバーから大量のバイナリ データを取得するために PHP ストリームを利用します。 このトピックでは、バイナリ データをストリームとして取得する方法を説明します。

ストリームを使用して画像などのバイナリ データを取得すると、オブジェクト全体をスクリプト メモリに読み込むのではなく、データのチャンクが取得されるので、大量のスクリプト メモリを使用しなくて済みます。

次の例では、AdventureWorks データベースの Production.ProductPhoto テーブルからバイナリ データ (この場合は画像) を取得します。 画像はストリームとして取得されて、ブラウザーに表示されます。

ストリームとしての画像データの取得は、戻り値の型をバイナリ ストリームとして指定した sqlsrv_fetch および sqlsrv_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 ドライバーを使用してデータをストリームとして取得する

ドキュメントのコード例について