Волею служебных обязательств пришлось прикручивать PHP к MSSQL. По инерции ожидал, что достаточно в php.ini расскоментарить в разделе extension строку типа: extension=php_mssql.dll, перегрузить apache и будет счастье. Но тут - облом! Нет такой строки в php.ini (у меня php 5.3.8), как и нет в php\ext такой dll-ки. Посмотрев по сторонам (интернет, форумы) быстрого ответа не получил. Копнул чуть глубже. И открыл для себя несколько фактов: 1. Начиная с какой-то версии php 5.3.x в штатном комплекте нет php_mssql.dll. 2. Разработкой драйвера под PHP для своего SQL-сервера занимается сама MS (http://msdn.microsoft.com/en-us/library/cc296172%28SQL.90%29.aspx) 3. Поставка драйверов разнится для версий клиента к MSSQL (http://www.microsoft.com/en-us/download/details.aspx?id=20098): - SQLSRV30.EXE для клиента SQL Server 2012; - SQLSRV20.EXE для клиента SQL Server 2008. 4. Самого MSSQL-клиента можно скачать порывшись здесь : http://msdn.microsoft.com/en-us/sqlserver/ff658532. Я ставил полностью SQLManagementStudio 2008 (в ее комплекте уже, само-собой, присутствовал и клиент),так как мне нужна была тулзовина для непосредственной работы с MSSQL. Теперь - мои пошаговые действия. 1. Скачал и установил на машину (где apache и php) клиента SQL Server 2008 (см. п.4 выше). 2. Скачал и разархивировал SQLSRV20.EXE (см. выше п.3). Получил след список файлов: ------------------------------------ php_pdo_sqlsrv_52_nts_vc6.dll php_pdo_sqlsrv_52_ts_vc6.dll php_pdo_sqlsrv_53_nts_vc6.dll php_pdo_sqlsrv_53_nts_vc9.dll php_pdo_sqlsrv_53_ts_vc6.dll php_pdo_sqlsrv_53_ts_vc9.dll php_sqlsrv_52_nts_vc6.dll php_sqlsrv_52_ts_vc6.dll php_sqlsrv_53_nts_vc6.dll php_sqlsrv_53_nts_vc9.dll php_sqlsrv_53_ts_vc6.dll php_sqlsrv_53_ts_vc9.dll SQLSRV_Help.chm SQLSRV_License.rtf SQLSRV_Readme.htm ------------------------------------ Файлы не начинающиеся на php - меня не интересуют - это явно не драйвера . Файлы начинающиеся с php_pdo, пока мне тоже не интересны. Поскольку у меня php5.3.8, рассматриваю файлы с маской "php_sqlsrv_53*". Таких файлов четыре. Блок "ts" или "nts" обозначает, соответственно, "Thread Safety" или "Not Thread Safety". Читаем из phpinfo() значение параметра "Thread Safety". У меня: Thread Safety = enabled. Значит маска для имени файла драйвера сужается до "php_sqlsrv_53_ts*.dll". Далее, из того же phpinfo() определяем каким компилятором собран наш php. В моем случае - Compiler = MSVC9(Visual C++ 2008). Т.е. окончательно имя моего драйвера: php_sqlsrv_53_ts_vc9.dll Подкладываем его (драйвер) в php\ext, добавляем в php.ini строку extension=php_sqlsrv_53_ts_vc9.dll и перестартовываем apache. Снова читаем phpinfo(). Если все нормально, то должны обнаружить блок sqlsrv. И, напоследок, контрольный выстрел. Собираем окончательно-проверочное мини-приложение: см. (http://msdn.microsoft.com/en-us/library/cc296161%28v=sql.90%29.aspx) ================================= Код (PHP): <?php $serverName = "<имя_вашего_sql-сервера\имя_инстанции,номер_порта>"; //если instance и port стандартные, то можно не указывать $connectionInfo = array("UID" => "<имя_пользователя>", "PWD" => "<пароль>", "Database"=>"<имяБД>"); $conn = sqlsrv_connect( $serverName, $connectionInfo); if( $conn ) { echo "Connection established.\n"; } else { echo "Connection could not be established.\n"; die( print_r( sqlsrv_errors(), true)); } /* Close the connection. */ sqlsrv_close( $conn); ?> ================================= Запускаем. Если получим "Connection established." - радуемся! Если "Connection could not be established." и гору сообщений об ошибках - перечитываем написанное, изучаем приведенные ссылки и пробуем, пробуем, пробуем ... Все получится! Всем удачи! Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
Да вот так сложилось. У заказчика уже установлены windows-сервера, куплен и развернут MSSQL 2008. Теперь подрядили нас автоматизировать их рабочие прооцессы. Требования Заказчика: приложения должны быть "web-овские", работать только во внутренней (интранет) сети. Мы выбрали библиотеку ExtJS для клиентской части и PHP для серверной. БД, как уже отмечал, MSSQL - тут без вариантов. Вот как-то так. Четких указаний, как скрестить MSSQL и PHP я быстро не нашел, вместо этого на этом же форуме встретил только вопросы " а как настроить...?". Поскольку получилось быстро разобраться - решил поделиться опытом, авось кому из страждущих пригодится.
ипался я как то с этой бедой....жесть конечно, сам так и не смог настроить.....шибко умный дядька помогал
наконец нашел нормально написанную инструкцию, но не помагает. стоит Apache 2.2.21 + PHP 5.3.18 + MSSQL 2008 делаю все как описано, но модуль оно не подключает втупую( уже хз сколько раз переустанавливал разные версии с нуля - ноль реакции. я в отчаянии
Привет всем, заинтересовала ваша тема, скажите у меня MSSQL 2008 и PHP Version 5.6.12 можно ли таким образом подключить драйвера? К данной бд? то есть использовать этот драйвер под эту версию просто у меня ХАМРР. Буду ждать ваши ответы. С уважением Леонид.
Привет всем, Вопрос, как можно подключится к БД удалённо к примеру не с апача который установлен на этом же компе где и SQL Server в к примеру с дома с домашнего компьютера
@StepanAMK, для этого сервер базы данных должен быть настроен на разрешение подключения не с локального хоста. Как настроить - можно почитать в интернете. В таком случае в параметрах подключения передаётся не localhost, а ip-адрес сервера
Как задать правельно вопрос что бы попасть на правельный путь? --- Добавлено --- $serverName = "<имя_вашего_sql-сервера\имя_инстанции,номер_порта>"; //если instance и port стандартные, то можно не указывать $connectionInfo = array("UID" => "<имя_пользователя>", "PWD" => "<пароль>", "Database"=>"<имяБД>"); $conn = sqlsrv_connect( $serverName, $connectionInfo); if( $conn ) { echo "Connection established.\n"; } else { echo "Connection could not be established.\n"; die( print_r( sqlsrv_errors(), true)); } /* Close the connection. */ sqlsrv_close( $conn); ?> Сдесь вообще про localhost нечего не прописано
@StepanAMK, как-нибудь типо "удалённое подключение к mssql". в явном виде нет, но оно предполагается в этой строчке
Тоесть присерно так $serverName = "./good, 91.235.144.16:9855"; //если instance и port стандартные, то можно не указывать ? --- Добавлено --- я не жадный держи