Richter web-программист: создание сайтов, написание интернет-магазинов, создание скриптов на PHP, MySQL, JavaScript. Качественная верстка HTML, CSS. Системы управления сайтом, CMS. Оптимизация для поисковиков
English version

Статьи веб-программиста: PHP + MS SQL Server: установка и настройка на Windows x64

Один из проектов
Областная газета Полная работа по верстке и программированию. Сложная "резиновая", преимущественно блочная верстка. Ряд динамических материалов, поиск по архиву газеты, комментарии к каждой статье, система опросов, формы отправки сообщений, управление материалами посредством WYSIWYG-редактора и др. Удобный web-администратор. Множественное успешное использование модуля U15 SBS "Web-Pro".
Система построения сайта SBS "Web-Pro"
SBS Web-Pro Средство для создания и удобного управления сайтом, имеющее расширенные по сравнению с CMS (Content Management System) характеристики. Более 5 лет успешного использования. Подробнее
Пишите!
Telegram
@richter_a
ICQ
176621941

PHP + MS SQL Server: установка и настройка на Windows x64

К списку статей

В этой статье коротко приводится решение проблемы подключения PHP к MS SQL Server на Windows x64. Решение описано тезисно, но полноценно, и является проверенным.

Проблема

Начиная с PHP 5.3.* в дистрибутиве нет php_mssql.dll. Это значит, что для использования PHP с MS SQL просто раскомментировать строку в php.ini будет недостаточным. Разработкой драйверов теперь занимается Microsoft, т.е. драйвер надо скачивать и ставить отдельно.

Система

PHP 5.6.16, Windows 10 x64, Apache 2.4, MS SQL Server 2012.

Решение

В первую очередь нужно, разумеется, установить сам MS SQL Server. Хорошим вариантом будет RUS\x64\SQLEXPRWT_x64_RUS.exe - включает в себя ядро СУБД и среду SQL Server Management Studio Express. Скачиваем, ставим как обычно.

Далее нужно скачать драйвера. В архивах находятся драйвера под разные версии PHP, нужно выбрать подходящий. Для PHP 5.6 подходит SQLSRV32.EXE (определяем по цифрам в именах DLL-файлов).
Всё бы хорошо, но для 64-битной Windows этот драйвер не подойдет (говорят, его просто не существует), поэтому скачиваем неофициальные драйвера и забираем оттуда 2 библиотеки (PDO и без него). Обратите внимание, что брать нужно из папки x64.

Итак, скачав и распаковав архив, копируем файлы php_sqlsrv_*.dll и php_pdo_sqlsrv_*.dll в папку расширений PHP, например, php5/ext/ (там, где лежат остальные библиотеки PHP).
Как выбрать, брать файлы "ts" или "nts" ("Thread Safety" или "Not Thread Safety"): в phpinfo() смотрим параметр Thread Safety - enabled или disabled.
Если файлы имеют суффикс "_vc*", смотрим через phpinfo() параметр Compiler.

Добавляем в php.ini строки extension=php_sqlsrv_*.dll и extension=php_pdo_sqlsrv_*.dll.
Перезапускаем Apache.
Контролируем через phpinfo() наличие блока "sqlsrv". Если он есть, значит установка прошла успешно, и можно тестировать соединение с БД.

Тестирование соединения

Перед тестированием создаем БД, таблицу, данные через SQL Server Management Studio.

Создаем тестовый скрипт по примеру от Microsoft.
$connectionInfo лучше не указывать, т.к. может не сработать, если не настроены пользователи и доступ.
$serverName = '(local)'; - для локального сервера (или можно указать имя компьютера, без скобок).
Таким образом мы проверяем, что MS SQL Server и PHP-драйверы успешно установлены, и мы можем подключаться, без учета конкретной БД.

Базовые запросы к БД

Чтобы подключиться к конкретной БД, в SQL Server Management Studio создаем пользователя: Security -> Logins -> Правая кнопка мыши. Выбираем метод SQL Server Authentification. В User Mapping делаем соответствие БД, и ниже настраиваем права.

Сервер должен быть настроен на SQL Server and Windows Authentication mode: правая кнопка мыши на сервере (первая строка в дереве), вкладка Security.

Пример выборки


$sql ="SELECT * FROM table_1";
$stmt = sqlsrv_query($conn, $sql);
if ($stmt === false) die(print_r(sqlsrv_errors(), true));

echo '
< table border="1">
'; 
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
  echo '
	< tr>< td>'.$row['col1'].'< /td>< td>'.$row['descr'].'< /td>< /tr>
  ';
}
echo '
< /table>
'; 
© 2016 Richter
Распространение только с разрешения автора
Рейтинг: 0.0. Голосов: 0
(0) Добавить комментарий

Наверх