Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A recuperação de dados como fluxo só está disponível no driver SQLSRV dos Microsoft Drivers for PHP for SQL Server, e não está disponível no driver PDO_SQLSRV.
Os Microsoft Drivers para PHP para SQL Server aproveitam os fluxos PHP para recuperar grandes quantidades de dados binários do servidor. Este tópico demonstra como recuperar dados binários como um fluxo.
Utilizar os fluxos para recuperar dados binários, como imagens, evita o uso de grandes quantidades de memória de script ao recuperar blocos de dados em vez de carregar o objeto inteiro na memória de script.
Example
O exemplo seguinte recupera dados binários, uma imagem neste caso, da tabela Production.ProductPhoto da base de dados AdventureWorks. A imagem é recuperada como um fluxo e exibida no navegador.
A recuperação de dados de imagem como fluxo é feita usando sqlsrv_fetch e sqlsrv_get_field com o tipo de retorno especificado como fluxo binário. O tipo de retorno é especificado usando a constante SQLSRV_PHPTYPE_STREAM. Para informações sobre constantes sqlsrv, consulte Constantes (Microsoft Drivers for PHP for SQL Server).
O exemplo assume que o SQL Server e a base de dados AdventureWorks estão instalados no computador local. Toda a saída é escrita no navegador quando o exemplo é executado a partir do navegador.
<?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);
?>
Especificar o tipo de retorno no exemplo demonstra como especificar o tipo de retorno PHP como um fluxo binário. Tecnicamente, não é obrigatório no exemplo porque o campo LargePhoto tem o tipo SQL Server varbinary(max) e, por isso, é devolvido como um fluxo binário por defeito. Para informações sobre os tipos de dados PHP predefinidos, consulte Tipos de Dados PHP Padrão. Para informações sobre como especificar tipos de retorno PHP, veja Como: Especificar Tipos de Dados PHP.