В предыдущей части в результате запроса к БД был получен 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;
}
Хранимые процедуры в 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. |