次の方法で共有


バイナリ データをストリームとして取得する方法

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

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

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

イメージ データをストリームとして取得するには、sqlsrv_fetch および sqlsrv_get_field を使用し、戻り値の型をバイナリ ストリームとして指定します。この戻り値の型を指定するには、定数 SQLSRV_PHPTYPE_STREAM を使用します。sqlsrv 定数の詳細については、「SQLSRV 定数」を参照してください。

この例では、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 データ型の詳細については、「既定の PHP データ型」を参照してください。PHP の戻り値の型を指定する方法の詳細については、「PHP データ型を指定する方法」を参照してください。

参照

概念

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

その他のリソース

データの取得
ストリームとしてのデータの取得