Como recuperar dados de caractere como um fluxo usando o driver SQLSRV
A recuperação de dados como um fluxo só está disponível no driver SQLSRV dos Drivers da Microsoft para PHP para SQL Server, e não está disponível no driver PDO_SQLSRV.
O driver SQLSRV aproveita os fluxos do PHP para recuperar grandes quantidades de dados do servidor. O exemplo neste tópico demonstra como recuperar dados de caractere como um fluxo.
Exemplo
O exemplo a seguir recupera uma linha da tabela Production.ProductReview do banco de dados AdventureWorks. O campo Comments da linha retornada é recuperado como um fluxo e exibido usando a função fpassthru do PHP.
A recuperação de dados como um fluxo é efetuada usando sqlsrv_fetch e sqlsrv_get_field com o tipo de retorno especificado como um fluxo de caractere. O tipo de retorno é especificado usando a constante SQLSRV_PHPTYPE_STREAM. Para obter informações sobre constantes sqlsrv, confira Constantes (Drivers da Microsoft para PHP para SQL Server).
O exemplo supõe que o SQL Server e o banco de dados AdventureWorks estejam instalados no computador local. Toda a saída será gravada no console quando o exemplo for executado da linha de comando.
<?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 ReviewerName,
CONVERT(varchar(32), ReviewDate, 107) AS [ReviewDate],
Rating,
Comments
FROM Production.ProductReview
WHERE ProductReviewID = ? ";
/* Set the parameter value. */
$productReviewID = 1;
$params = array( $productReviewID);
/* Execute the query. */
$stmt = sqlsrv_query($conn, $tsql, $params);
if( $stmt === false )
{
echo "Error in statement execution.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Retrieve and display the data. The first three fields are retrieved
as strings and the fourth as a stream with character encoding. */
if(sqlsrv_fetch( $stmt ) === false )
{
echo "Error in retrieving row.\n";
die( print_r( sqlsrv_errors(), true));
}
echo "Name: ".sqlsrv_get_field( $stmt, 0 )."\n";
echo "Date: ".sqlsrv_get_field( $stmt, 1 )."\n";
echo "Rating: ".sqlsrv_get_field( $stmt, 2 )."\n";
echo "Comments: ";
$comments = sqlsrv_get_field( $stmt, 3,
SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_CHAR));
fpassthru($comments);
/* Free the statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
Como nenhum tipo de retorno do PHP é especificado para os três primeiros campos, cada campo é retornado de acordo com seu tipo do PHP padrão. Para obter informações sobre os tipos de dados padrão do PHP, consulte Default PHP Data Types. Para obter informações sobre como especificar tipos de retorno do PHP, consulte How to: Specify PHP Data Types.