Поделиться через


Практическое руководство. Извлечение двоичных данных в виде потока с помощью драйвера SQLSRV

Скачать драйвер PHP

Получение данных в виде потока доступно только в драйвере SQLSRV драйверов Майкрософт для PHP для SQL Server и недоступно в драйвере PDO_SQLSRV.

Драйверы Майкрософт для PHP для SQL Server используют потоки PHP для получения больших объемов двоичных данных с сервера. Эта статья описывает, как извлекать двоичные данные в виде потока.

Применение потоков для извлечения двоичных данных, таких как изображения, позволяет избежать использования больших объемов памяти скрипта за счет извлечения блоков данных вместо загрузки в память скрипта всего объекта целиком.

Пример

Следующий пример извлекает двоичные данные (в данном случае это изображение) из таблицы Production.ProductPhoto базы данных AdventureWorks. Изображение извлекается в виде потока и отображается в браузере.

Извлечение данных изображения в виде потока осуществляется с помощью sqlsrv_fetch и sqlsrv_get_field с типом возвращаемого значения, указанным в виде двоичного потока. Тип возвращаемого значения определяется с помощью константы SQLSRV_PHPTYPE_STREAM. Сведения о константах sqlsrv см. в статье Константы (драйверы Майкрософт для PHP для 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

Информация о примерах кода в документации