- PHP Использование SQLSRV
- Создание соединения
- Создание простого запроса
- Вызов хранимой процедуры
- Создание параметризованного запроса
- Получение результатов запроса
- sqlsrv_fetch_array ()
- sqlsrv_fetch_object ()
- sqlsrv_fetch ()
- Получение сообщений об ошибках
- sqlsrv_fetch
- Список параметров
- Возвращаемые значения
- Примеры
- Смотрите также
- User Contributed Notes
- sqlsrv_fetch_array
- Parameters
- Return Values
- Examples
- Notes
- See Also
PHP
Использование SQLSRV
Драйвер SQLSRV является поддерживаемым Microsoft расширением PHP, которое позволяет вам обращаться к базам данных Microsoft SQL Server и SQL Azure. Это альтернатива для драйверов MSSQL, которые устарели от PHP 5.3 и были удалены с PHP 7.
Расширение SQLSRV можно использовать в следующих операционных системах:
- Windows Vista с пакетом обновления 2 или более поздней версии
- Windows Server 2008 с пакетом обновления 2 или более поздней версии
- Windows Server 2008 R2
- Windows 7
Для расширения SQLSRV требуется, чтобы собственный клиент Microsoft SQL Server 2012 был установлен на том же компьютере, на котором запущен PHP. Если основной клиент Microsoft SQL Server 2012 еще не установлен, щелкните соответствующую ссылку на странице документации «Требования» .
Чтобы загрузить последние версии драйверов SQLSRV, перейдите по ссылке: Загрузить
Полный список системных требований для драйверов SQLSRV можно найти здесь: Системные требования
Пользователи PHP7 могут загрузить последние версии драйверов от GitHub
Драйвер Microsoft® ODBC 13 для SQL Server поддерживает Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016 (Preview), платформу Google Analytics, базу данных Azure SQL и хранилище данных Azure SQL.
Создание соединения
$dbServer = "localhost,1234"; //Name of the server/instance, including optional port number (default is 1433) $dbName = "db001"; //Name of the database $dbUser = "user"; //Name of the user $dbPassword = "password"; //DB Password of that user $connectionInfo = array( "Database" => $dbName, "UID" => $dbUser, "PWD" => $dbPassword ); $conn = sqlsrv_connect($dbServer, $connectionInfo);
В SQLSRV также есть драйвер PDO. Для подключения с использованием PDO:
$conn = new PDO("sqlsrv:Server=localhost,1234;Database=db001", $dbUser, $dbPassword);
Создание простого запроса
//Create Connection $conn = sqlsrv_connect($dbServer, $connectionInfo); $query = "SELECT * FROM [table]"; $stmt = sqlsrv_query($conn, $query);
Примечание: использование квадратных скобок [] заключается в выходе из table слов, поскольку это зарезервированное слово . Они работают так же, как backticks ` делают в MySQL .
Вызов хранимой процедуры
Чтобы вызвать хранимую процедуру на сервере:
$query = ""; //Parameters '?' includes OUT parameters $params = array( array($name, SQLSRV_PARAM_IN), array($age, SQLSRV_PARAM_IN), array($count, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT) //$count must already be initialised ); $result = sqlsrv_query($conn, $query, $params);
Создание параметризованного запроса
$conn = sqlsrv_connect($dbServer, $connectionInfo); $query = "SELECT * FROM [users] WHERE [name] = ? AND [password] = ?"; $params = array("joebloggs", "pa55w0rd"); $stmt = sqlsrv_query($conn, $query, $params);
Если вы планируете использовать один и тот же запрос более одного раза, с разными параметрами, то же самое можно достичь с помощью sqlsrv_prepare() и sqlsrv_execute() , как показано ниже:
$cart = array( "apple" => 3, "banana" => 1, "chocolate" => 2 ); $query = "INSERT INTO [order_items]([item], [quantity]) VALUES(. )"; $params = array(&$item, &$qty); //Variables as parameters must be passed by reference $stmt = sqlsrv_prepare($conn, $query, $params); foreach($cart as $item => $qty) < if(sqlsrv_execute($stmt) === FALSE) < die(print_r(sqlsrv_errors(), true)); >>
Получение результатов запроса
Существует 3 основных способа получения результатов запроса:
sqlsrv_fetch_array ()
sqlsrv_fetch_array() извлекает следующую строку в виде массива.
$stmt = sqlsrv_query($conn, $query); while($row = sqlsrv_fetch_array($stmt)) < echo $row[0]; $var = $row["name"]; //. >
sqlsrv_fetch_array() имеет необязательный второй параметр для извлечения различных типов массивов: SQLSRV_FETCH_ASSOC , SQLSRV_FETCH_NUMERIC и SQLSRV_FETCH_BOTH (по умолчанию) ; каждый возвращает соответственно ассоциативные, числовые или ассоциативные и числовые массивы.
sqlsrv_fetch_object ()
sqlsrv_fetch_object() извлекает следующую строку в качестве объекта.
$stmt = sqlsrv_query($conn, $query); while($obj = sqlsrv_fetch_object($stmt)) < echo $obj->field; // Object property names are the names of the fields from the query //. >
sqlsrv_fetch ()
sqlsrv_fetch() делает следующую строку доступной для чтения.
$stmt = sqlsrv_query($conn, $query); while(sqlsrv_fetch($stmt) === true) < $foo = sqlsrv_get_field($stmt, 0); //gets the first field - >
Получение сообщений об ошибках
Когда запрос идет не так, важно получить сообщение об ошибке, которое возвращается драйвером, чтобы определить причину проблемы. Синтаксис:
sqlsrv_errors([int $errorsOrWarnings]);
ключ | Описание |
---|---|
SQLSTATE | Состояние, в котором находится драйвер SQL Server / OBDC. |
код | Код ошибки SQL Server |
сообщение | Описание ошибки |
Обычно используется вышеуказанная функция:
$brokenQuery = "SELECT BadColumnName FROM Table_1"; $stmt = sqlsrv_query($conn, $brokenQuery); if ($stmt === false) < if (($errors = sqlsrv_errors()) != null) < foreach ($errors as $error) < echo "SQLSTATE: ".$error['SQLSTATE']."
"; echo "code: ".$error['code']."
"; echo "message: ".$error['message']."
"; > > >
- Начало работы с PHP
- APCu
- BC Math (бинарный калькулятор)
- Imagick
- IMAP
- JSON
- Loops
- PDO
- PHP MySQLi
- php mysqli affected rows возвращает 0, когда он должен возвращать положительное целое число
- PHP Встроенный сервер
- PHPDoc
- PSR
- SimpleXML
- SQLite3
- Streams
- URL-адрес
- UTF-8,
- WebSockets
- XML
- YAML в PHP
- Автозагрузка грунтовки
- Альтернативный синтаксис для структур управления
- Анализ HTML
- Асинхронное программирование
- Аутентификация HTTP
- Безопасность
- Буферизация вывода
- Вклад в PHP Core
- Внедрение зависимости
- Внесение изменений в Руководство по PHP
- Волшебные константы
- Волшебные методы
- Вывод значения переменной
- Выполнение по массиву
- Генераторы
- закрытие
- Защитите Remeber Me
- Интерфейс командной строки (CLI)
- Использование cURL в PHP
- Использование MongoDB
- Использование Redis с PHP
- Использование SQLSRV
- Итерация массива
- Как определить IP-адрес клиента
- Как разбить URL-адрес
- Класс Datetime
- Классы и объекты
- Клиент SOAP
- Комментарии
- Компилировать расширения PHP
- Компиляция ошибок и предупреждений
- Константы
- Контрольные структуры
- криптография
- кэш
- локализация
- Манипулирование массивом
- Манипуляции заголовков
- Массивы
- Машинное обучение
- Менеджер зависимостей композитора
- Многопоточное расширение
- многопроцессорная обработка
- Монго-PHP
- Область переменных
- Обработка изображений с помощью GD
- Обработка исключений и отчетов об ошибках
- Обработка нескольких массивов вместе
- Обработка файлов
- Общие ошибки
- операторы
- отладка
- Отправка электронной почты
- отражение
- переменные
- Переменные Superglobal PHP
- Печенье
- Поддержка Unicode в PHP
- Пространства имен
- Работа с датами и временем
- Развертывание докеров
- Регулярные выражения (regexp / PCRE)
- Рекомендации
- Рецепты
- Розетки
- Сервер SOAP
- Сериализация
- Сериализация объектов
- сессии
- Соглашения о кодировании
- Создание PDF-файлов в PHP
- Спектакль
- Строковый анализ
- Структуры данных SPL
- Тестирование устройства
- Тип жонглирования и нерегулярные проблемы сравнения
- Тип подсказки
- Типы
- Установка в средах Linux / Unix
- Установка среды PHP в Windows
- Фильтры и функции фильтра
- Форматирование строк
- функции
- Функции хеширования пароля
- Функциональное программирование
- Черты
- Чтение данных запроса
- Шаблоны проектирования
sqlsrv_fetch
Делает следующую строку в наборе результатов доступной для чтения. Используйте sqlsrv_get_field() для чтения полей строки.
Список параметров
- SQLSRV_SCROLL_NEXT
- SQLSRV_SCROLL_PRIOR
- SQLSRV_SCROLL_FIRST
- SQLSRV_SCROLL_LAST
- SQLSRV_SCROLL_ABSOLUTE
- SQLSRV_SCROLL_RELATIVE
Указывает строку, к которой будет осуществляться доступ, если для параметра строки установлено значение SQLSRV_SCROLL_ABSOLUTE или SQLSRV_SCROLL_RELATIVE . Обратите внимание, что первая строка в наборе результатов имеет индекс 0.
Возвращаемые значения
Возвращает true , если следующая строка набора результатов была успешно получена, false в случае возникновения ошибки и null , если в наборе результатов больше нет строк.
Примеры
Пример #1 Пример использования sqlsrv_fetch()
В следующем примере показано, как получить строку с помощью sqlsrv_fetch() и получить поля строки с помощью sqlsrv_get_field() .
$serverName = «serverName\sqlexpress» ;
$connectionInfo = array( «Database» => «dbName» , «UID» => «username» , «PWD» => «password» );
$conn = sqlsrv_connect ( $serverName , $connectionInfo );
if( $conn === false ) die( print_r ( sqlsrv_errors (), true ));
>
?php
$sql = «SELECT Name, Comment
FROM Table_1
WHERE ReviewID=1″ ;
$stmt = sqlsrv_query ( $conn , $sql );
if( $stmt === false ) die( print_r ( sqlsrv_errors (), true ));
>
// Сделайте первую (и в данном случае единственную) строку набора результатов доступной для чтения.
if( sqlsrv_fetch ( $stmt ) === false ) die( print_r ( sqlsrv_errors (), true ));
>
// Получите поля строки. Индексы полей начинаются с 0 и должны извлекаться по порядку.
// Получение полей строки по имени не поддерживается sqlsrv_get_field.
$name = sqlsrv_get_field ( $stmt , 0 );
echo » $name : » ;
$comment = sqlsrv_get_field ( $stmt , 1 );
echo $comment ;
?>
Смотрите также
- sqlsrv_get_field() — Получает данные поля из текущей выбранной строки
- sqlsrv_fetch_array() — Возвращает строку как массив
- sqlsrv_fetch_object() — Получает следующую строку данных в наборе результатов как объект
User Contributed Notes
- Функции SQLSRV
- sqlsrv_begin_transaction
- sqlsrv_cancel
- sqlsrv_client_info
- sqlsrv_close
- sqlsrv_commit
- sqlsrv_configure
- sqlsrv_connect
- sqlsrv_errors
- sqlsrv_execute
- sqlsrv_fetch_array
- sqlsrv_fetch_object
- sqlsrv_fetch
- sqlsrv_field_metadata
- sqlsrv_free_stmt
- sqlsrv_get_config
- sqlsrv_get_field
- sqlsrv_has_rows
- sqlsrv_next_result
- sqlsrv_num_fields
- sqlsrv_num_rows
- sqlsrv_prepare
- sqlsrv_query
- sqlsrv_rollback
- sqlsrv_rows_affected
- sqlsrv_send_stream_data
- sqlsrv_server_info
sqlsrv_fetch_array
Returns the next available row of data as an associative array, a numeric array, or both (the default).
Parameters
A statement resource returned by sqlsrv_query or sqlsrv_prepare.
A predefined constant specifying the type of array to return. Possible values are SQLSRV_FETCH_ASSOC , SQLSRV_FETCH_NUMERIC , and SQLSRV_FETCH_BOTH (the default).
A fetch type of SQLSRV_FETCH_ASSOC should not be used when consuming a result set with multiple columns of the same name.
Specifies the row to access in a result set that uses a scrollable cursor. Possible values are SQLSRV_SCROLL_NEXT , SQLSRV_SCROLL_PRIOR , SQLSRV_SCROLL_FIRST , SQLSRV_SCROLL_LAST , SQLSRV_SCROLL_ABSOLUTE and, SQLSRV_SCROLL_RELATIVE (the default). When this parameter is specified, the fetchType must be explicitly defined.
Specifies the row to be accessed if the row parameter is set to SQLSRV_SCROLL_ABSOLUTE or SQLSRV_SCROLL_RELATIVE . Note that the first row in a result set has index 0.
Return Values
Returns an array on success, null if there are no more rows to return, and false if an error occurs.
Examples
Example #1 Retrieving an associative array.
$serverName = «serverName\instanceName» ;
$connectionInfo = array( «Database» => «dbName» , «UID» => «username» , «PWD» => «password» );
$conn = sqlsrv_connect ( $serverName , $connectionInfo );
if( $conn === false ) die( print_r ( sqlsrv_errors (), true ));
>?php
$sql = «SELECT FirstName, LastName FROM SomeTable» ;
$stmt = sqlsrv_query ( $conn , $sql );
if( $stmt === false ) die( print_r ( sqlsrv_errors (), true ) );
>while( $row = sqlsrv_fetch_array ( $stmt , SQLSRV_FETCH_ASSOC ) ) echo $row [ ‘LastName’ ]. «, » . $row [ ‘FirstName’ ]. «
» ;
>Example #2 Retrieving a numeric array.
$serverName = «serverName\instanceName» ;
$connectionInfo = array( «Database» => «dbName» , «UID» => «username» , «PWD» => «password» );
$conn = sqlsrv_connect ( $serverName , $connectionInfo );
if( $conn === false ) die( print_r ( sqlsrv_errors (), true ));
>?php
$sql = «SELECT FirstName, LastName FROM SomeTable» ;
$stmt = sqlsrv_query ( $conn , $sql );
if( $stmt === false ) die( print_r ( sqlsrv_errors (), true ) );
>while( $row = sqlsrv_fetch_array ( $stmt , SQLSRV_FETCH_NUMERIC ) ) echo $row [ 0 ]. «, » . $row [ 1 ]. «
» ;
>Notes
Not specifying the fetchType or explicitly using the SQLSRV_FETCH_TYPE constant in the examples above will return an array that has both associative and numeric keys.
If more than one column is returned with the same name, the last column will take precedence. To avoid field name collisions, use aliases.
If a column with no name is returned, the associative key for the array element will be an empty string («»).
See Also
- sqlsrv_connect() — Opens a connection to a Microsoft SQL Server database
- sqlsrv_query() — Prepares and executes a query
- sqlsrv_errors() — Returns error and warning information about the last SQLSRV operation performed
- sqlsrv_fetch() — Makes the next row in a result set available for reading