В предыдущей части в результате запроса к БД был получен sqlsrv объект типа SQL Server Statement resource. Для его обработки существует функция sqlsrv_fetch_array(). Первым ее параметром является объект-ресурс, полученный на предыдущем шаге, а вторым можно указать какой массив нам нужно получить — ассоциативный (SQLSRV_FETCH_ASSOC), не ассоциативный(SQLSRV_FETCH_NUMERIC) или оба сразу (SQLSRV_FETCH_BOTH — стоит по умолчанию).

Выполним следующий код:

while( $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) ){
	$result[] = $row;
}
Преобразование данных

В результате в переменной result получим что-то вроде такого:

array:1 [
  0 => array:3 [
    "id" => 1
    "name" => "a"
    "email" => "a@aa.aa"
  ]
]

Получился обычный ассоциативный массив, с которым можно дальше работать

Хранимые процедуры в sqlsrv

Хранимая процедура — объект базы данных, представляющий собой набор SQL-инструкций, который компилируется один раз и хранится на сервере. Это означает, что она может хранится отдельно на сервере и использоваться разными приложениями. Библиотека sqlsrv позволяет работать с такими процедурами.

Для выполнения хранимой процедуры используется та же функция sqlsrv_query(). В качестве второго параметра (запроса) ей необходимо передать следующую строку:

$sql = "{call ".$nameFunc."}";

где $nameFunc — имя хранимой процедуры.

Представим, что у нас на сервере существует хранимая процедура get_users, которая возвращает всех пользователей. Для ее выполнения необходимо написать следующий код:

$nameFunc = 'get_users';
$sql = "{call ".$nameFunc."}";
$stmt = sqlsrv_query($this->conn, $sql);
while( $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) ){
	$result[] = $row;
}
Выполнение хранимой процедуры

Хранимые процедуры с параметрами

Хранимые процедуры также могут содержать входные параметры. Так, например, наша процедура get_users может содержать входной параметр id, введя который можно получить пользователя с данным id. В передаче данных параметров поможет третий аргумент функции sqlsrv_query():

$params = [0 => 1];
$nameFunc = 'get_users';
$sql = "{call ".$nameFunc."(?)}";
$stmt = sqlsrv_query($this->conn, $sql, $params);
while( $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) ){
	$result[] = $row;
}
Выполнение хранимой процедуры с параметром

Результат этой хранимой процедуры будет записан в переменную $result.

Ключ Возможные значения Описание
QueryTimeout Положительное целочисленное значение. Устанавливает тайм-аут запроса в секундах. По умолчанию драйвер будет ждать неограниченное количество результатов.
SendStreamParamsAtExec TRUE или FALSE (по умолчанию TRUE) Настраивает драйвер для отправки всех данных потока при выполнении (TRUE) или для отправки данных потока в кусках (FALSE).
Scrollable SQLSRV_CURSOR_FORWARD, SQLSRV_CURSOR_STATIC, SQLSRV_CURSOR_DYNAMIC или SQLSRV_CURSOR_KEYSET Драйвер SQLSRV позволяет создать результирующий набор со строками, которые можно открыть в любом порядке, в зависимости от типа курсора. Подробнее на сайте Microsoft.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *