sqlsrv_fetch_array
Извлекает следующую строку данных в виде массива с числовым индексом и (или) ассоциативного массива.
Синтаксис
sqlsrv_fetch_array( resource $stmt[, int $fetchType [, row[, ]offset]])
Параметры
$stmt: ресурс инструкции, соответствующий выполненной инструкции.
$fetchType (необязательно): предопределенная константа. Этот параметр может принимать одно из значений, содержащихся в следующей таблице.
значение | Описание |
---|---|
SQLSRV_FETCH_NUMERIC | Следующая строка данных возвращается в виде числового массива. |
SQLSRV_FETCH_ASSOC | Следующая строка данных возвращается в виде ассоциативного массива. Ключами массива являются имена столбцов в результирующем наборе. |
SQLSRV_FETCH_BOTH | Следующая строка данных возвращается в виде как числового массива, так и ассоциативного массива. Это значение по умолчанию. |
row (необязательно): добавлено в версии 1.1. Одно из следующих значений, определяющее строку, к которой требуется получить доступ в результирующем наборе, использующем прокручиваемый курсор. (Если вы указываете row, необходимо явно указать fetchtype, даже если вы используете значение по умолчанию.)
- SQLSRV_SCROLL_NEXT
- SQLSRV_SCROLL_PRIOR
- SQLSRV_SCROLL_FIRST
- SQLSRV_SCROLL_LAST
- SQLSRV_SCROLL_ABSOLUTE
- SQLSRV_SCROLL_RELATIVE
Дополнительные сведения об этих значениях см. в статье Указание типа курсора и выбор строк. Поддержка прокручиваемого курсора добавлена в версии 1.1 драйверов Майкрософт для PHP для SQL Server.
offset (необязательно): используется с SQLSRV_SCROLL_ABSOLUTE и SQLSRV_SCROLL_RELATIVE для указания извлекаемой строки. Первой записью в результирующем наборе является 0.
Возвращаемое значение
Если извлечена строка данных, возвращается массив . Если больше нет строк для извлечения, возвращается значение null . Если произошла ошибка, возвращается значение false .
В зависимости от значения параметра $fetchType , возвращаемый массив может быть массивомс числовым индексом и (или) ассоциативным массивом. По умолчанию возвращается массив с числовыми и ассоциативными ключами. Для значения в возвращенном массиве используется тип данных PHP по умолчанию. Дополнительные сведения о типах данных PHP по умолчанию см. в статье Default PHP Data Types.
Замечания
Если возвращается столбец без имени, то ассоциативным ключом для данного элемента массива будет пустая строка (""). Например, рассмотрим эту инструкцию Transact-SQL, которая вставляет значение в таблицу базы данных и извлекает созданный сервером первичный ключ:
INSERT INTO Production.ProductPhoto (LargePhoto) VALUES (?);
SELECT SCOPE_IDENTITY()
Если результирующий набор, возвращаемый частью SELECT SCOPE_IDENTITY()
этой инструкции, извлекается в виде ассоциативного массива, ключом для возвращенного значения будет пустая строка (""), так как возвращаемый столбец не имеет имени. Чтобы избежать этого, можно извлечь результат в виде числового массива или указать имя возвращаемого столбца в инструкции Transact-SQL. Ниже приведена одна из инструкций для указания имени столбца в Transact-SQL.
SELECT SCOPE_IDENTITY() AS PictureID
Если результирующий набор содержит несколько столбцов без имени, значение последнего столбца без имени присваивается ключу пустой строки ("").
Пример ассоциативного массива
Следующий пример извлекает каждую строку результирующего набора в виде ассоциативного массива. В примере предполагается, что 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 and execute the query. */
$tsql = "SELECT FirstName, LastName
FROM Person.Contact
WHERE LastName='Alan'";
$stmt = sqlsrv_query( $conn, $tsql);
if( $stmt === false)
{
echo "Error in query preparation/execution.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Retrieve each row as an associative array and display the results.*/
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
{
echo $row['LastName'].", ".$row['FirstName']."\n";
}
/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
Пример индексированного массива
Следующий пример извлекает каждую строку результирующего набора в виде массива с числовым индексом.
Пример извлекает из таблицы Purchasing.PurchaseOrderDetail базы данных AdventureWorks сведения о продуктах с определенной датой и запасом (StockQty) меньше указанного значения.
В примере предполагается, что 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));
}
/* Define the query. */
$tsql = "SELECT ProductID,
UnitPrice,
StockedQty
FROM Purchasing.PurchaseOrderDetail
WHERE StockedQty < 3
AND DueDate='2002-01-29'";
/* Execute the query. */
$stmt = sqlsrv_query( $conn, $tsql);
if ( $stmt )
{
echo "Statement executed.\n";
}
else
{
echo "Error in statement execution.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Iterate through the result set printing a row of data upon each
iteration.*/
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC))
{
echo "ProdID: ".$row[0]."\n";
echo "UnitPrice: ".$row[1]."\n";
echo "StockedQty: ".$row[2]."\n";
echo "-----------------\n";
}
/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
Функция sqlsrv_fetch_array всегда возвращает данные в соответствии с Default PHP Data Types. (Дополнительные сведения об указании типа данных PHP см. в статье How to: Specify PHP Data Types.)
Если извлекается поле без имени, то ассоциативным ключом для данного элемента массива будет пустая строка (""). Дополнительные сведения см. в статье sqlsrv_fetch_array.
См. также
Справочник по API для драйвера SQLSRV
Информация о примерах кода в документации
Руководство по программированию драйверов Microsoft для PHP для SQL Server