Практическое руководство. Извлечение символьных данных в виде потока с помощью драйвера SQLSRV
Получение данных в виде потока доступно только в драйвере SQLSRV драйверов Майкрософт для PHP для SQL Server и недоступно в драйвере PDO_SQLSRV.
Драйвер SQLSRV использует преимущества потоков PHP для извлечения больших объемов данных с сервера. Пример в этой статье показывает, как извлекать символьные данные в виде потока.
Пример
Следующий пример извлекает строку из таблицы Production.ProductReview базы данных AdventureWorks. Поле Comments возвращенной строки извлекается в виде потока и отображается с помощью функции fpassthru PHP.
Извлечение данных в виде потока осуществляется с помощью 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 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);
?>
Поскольку тип возвращаемых данных PHP для первых трех полей не задан, каждое поле возвращается в соответствии с его типом PHP по умолчанию. Дополнительные сведения о типах данных PHP по умолчанию см. в статье Default PHP Data Types. Дополнительные сведения об указании типов возвращаемых данных PHP см. в статье How to: Specify PHP Data Types.