В данной заметке я хочу поделиться тем, как мне удалось «подружить» Microsoft SQL Server (MSSQL) и PHP. Когда я брался за данную задачу ничего не предвещало беды, ведь казалось бы, что может быть проще, чем подключиться к базе и выполнять к ней запросы?
Установка и настройка библиотек
В php присутствует несколько способов соединения с базой MSSQL — библиотеки mssql, sqlsrv, pdo. Однако начиная с версии php 5.5 библиотека mssql была признана устаревшей и удалена в php 7. Следовательно стоит использовать библиотеку sqlsrv. Тут необходимо сказать, что sqlsrv не является встроенной библиотекой, поэтому ее необходимо установить с официального сайта Microsoft. Обратите внимание на номер версии загружаемого файла.
- версия 3.0 для PHP 5.4
- версия 3.1 для PHP 5.5
- версия 3.2 для PHP 5.6
- версия 4.0 для PHP 7+
Полученный файл необходимо разместить в папке /ext/ в корне php директории. После этого надо добавить в php.ini следующую строчку:
extension=php_sqlsrv_XX_YY.dll
XX — номер версии php, например 56
YY — это параметр Thread Safety, который можно посмотреть в phpinfo():
Если указано enabled, то вместо YY надо вставить ts, а если disabled — то nts.
Соединение с базой
После настройки библиотек можно пробовать устанавливать соединение. Сделать это можно при помощи функции sqlsrv_connect():
$servername = 'имя сервера\имя instance, номер порта'; // instance и порт - необязательные параметры
$options = [
'UID' => 'username', // имя пользователя, имеющего доступ к БД
'PWD' => 'password', // пароль
'Database' => 'dbname' // название БД, к которой подключаемся
];
$conn = sqlsrv_connect($servername, $options);
if( $conn === false ) {
die( print_r( sqlsrv_errors() ));
}
else{
echo 'Соединение установлено';
}
Если видим сообщение «Соединение установлено», то все хорошо, можно переходить к следующему пункту. В противном же случае php выведет ошибку, из-за которой не получилось открыть соединение. Это делает функция sqlsrv_errors().
Запрос к базе данных
Самая простая операция с любой базой данных — это запрос на выбор определенных значений. Однако даже здесь могут поджидать различные подводные камни.
Запрос к базе mssql выполняется с помощью функции sqlsrv_query(). Первым параметром необходимо указать переменную $conn, в которой хранится соединение с базой, вторым сам запрос. Третий необязательный параметр — параметры, которые можно передать в запросе, четвертый — опции. Пока что опустим два последних параметра, рассмотрим их позднее.
$sql = "SELECT * FROM users WHERE id = 1";
$stmt = sqlsrv_query($conn, $sql);
if( $stmt === false ) {
die( print_r( sqlsrv_errors(), true));
}
Функция sqlsrv_errors() выведет ошибки, если запрос выполнить не удастся.
Результатом работы данной функции является объект типа SQL Server Statement resource (либо false, если соединение не удалось). Это означает, что перед выводом результат нужно предварительно обработать!
О том как это сделать, а также о других возможностях библиотеки можно почитать в следующей части.