Подключение MS SQL к PHP 5.3 и выше

Недавно передо мной встала задача: работать с MS SQL из PHP. Поиск в Google по ключевым словам «php mssql» и подобным дал уйму ссылок с примерно одинаковой инструкцией:
— раскомментировать в php.ini строчку extension=php_mssql.dll;
— перезапустить Апач/Денвер;
— наслаждаться.

Однако выяснилось, что начиная с версии 5.3 в состав дистрибутива PHP это расширение не входит и, более того, не поддерживается. Для работы с MS SQL рекомендуется драйвер SqlSrv от Microsoft. Пошаговой инструкции по работе с ним найти не смог, поэтому после ряда проб и ошибок написал свою, которую и предлагаю вашему вниманию.

Первое, с чем придётся столкнуться — это соответствие версий PHP, MS SQL, SqlSrv и Windows.

SqlSrv доступен двух версий: 2.0 и 3.0. Версия 2.0 работает только c MS SQL 2008, при этом поддерживает PHP версий 5.2 и 5.3; версия 3.0 работает только с MS SQL 2012, а PHP поддерживает версий 5.3 и 5.4. При этом необходимо помнить, что MS SQL 2012 работает только под Windows Vista и выше.
На моей машине стоит Windows XP, поэтому были взяты: MS SQL 2008, PHP 5.3.5 и SqlSrv 2.0.

Сначала нужно установить сам сервер MS SQL; неожиданностей в установке нет, обо всех проблемах установщик сообщает вовремя и даёт возможность исправить. Желательно также установить MS SQL Server Management Studio: средство управления базами данных. Установка похожа на установку сервера.

Установка связки Apache+PHP описывалась много и подробно, так что здесь не будем её касаться.

Теперь нужно подключить SqlSrv к PHP. Скачанный с сайта Microsoft дистрибутив — это самораспаковывающийся архив с несколькими библиотеками .dll, для разных версий PHP. Так, я использовал php_sqlsrv_53_ts_vc6.dll. Здесь 53 − ветка PHP (5.3.x), ts − Thread Safe дистрибутив, vc6 − использованный компилятор. Если нужно, то эти сведения можно найти в первом же блоке phpinfo(). Подходящую библиотеку нужно скопировать в каталог \ext, а также добавить в php.ini строчку

extension=php_sqlsrv_53_ts_vc6.dll

Если PHP только что установлен, нужно также не забыть раскомментировать строчку

extension_dir = "c:\php\ext"


PHP готов к работе. Осталось подготовить MS SQL; дело в том, что после установки у него отключены все клиентские протоколы, кроме «Общая память». Нужно их включить; делается это в приложении SQL Server Configuration Manager, идущая в комплекте с сервером.

Теперь все компоненты настроены, и можно проверять работу всей системы. Для этого подойдёт такой скрипт:

function FormatErrors( $errors )
{
echo "Error information: <br/>";

foreach ( $errors as $error )
{
echo "SQLSTATE: ".$error['SQLSTATE']."<br/>";
echo "Code: ".$error['code']."<br/>";
echo "Message: ".$error['message']."<br/>";
}
}

$serverName = "Имя сервера"; // Имя сервера задавалось при установке; его также можно увидеть при запуске Management Studio

$conn = sqlsrv_connect( $serverName);
if( $conn === false )
{ die( FormatErrors(sqlsrv_errors()) ); }

var_dump($conn);


Если всё правильно, то на экране будет строчка

resource(2) of type (SQL Server Connection)

И последнее: для работы с базой данных из PHP нужно использовать функции семейства sqlsrv_, а не mssql_.

Полезные ссылки:
Microsoft SQL Server 2008 Express
Microsoft SQL Server 2008 Management Studio Express
Microsoft Drivers 3.0 for SQL Server for PHP (SqLSrv)
Функции PHP для работы с SqlSrv
Tags:
php, ms sql, sqlsrv

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.