За последние 24 часа нас посетили 18354 программиста и 1613 роботов. Сейчас ищут 950 программистов ...

Как я настраивал PHP+MSSQL

Тема в разделе "MSSQL", создана пользователем granatoleg, 23 июл 2012.

  1. granatoleg

    granatoleg Активный пользователь

    С нами с:
    23 июл 2012
    Сообщения:
    2
    Симпатии:
    1
    Волею служебных обязательств пришлось прикручивать 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):
    1. <?php
    2.  
    3. $serverName = "<имя_вашего_sql-сервера\имя_инстанции,номер_порта>"; //если instance и port стандартные, то можно не указывать
    4. $connectionInfo = array("UID" => "<имя_пользователя>", "PWD" => "<пароль>", "Database"=>"<имяБД>");
    5. $conn = sqlsrv_connect( $serverName, $connectionInfo);
    6.  
    7. if( $conn )
    8. {
    9.      echo "Connection established.\n";
    10. }
    11. else
    12. {
    13.      echo "Connection could not be established.\n";
    14.      die( print_r( sqlsrv_errors(), true));
    15. }
    16.  
    17.  
    18. /* Close the connection. */
    19. sqlsrv_close( $conn);
    20. ?>
    =================================
    Запускаем. Если получим "Connection established." - радуемся! Если "Connection could not be established." и гору сообщений об ошибках - перечитываем написанное, изучаем приведенные ссылки и пробуем, пробуем, пробуем ...
    Все получится!
    Всем удачи!

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
    Zahar нравится это.
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    забавно. А что ж заставило скрестить PHP и MSSQL?
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.105
    Симпатии:
    1.243
    Адрес:
    там-сям
    в корпоративных сетях MS очень даже распостранен, почему PHP должен этот факт игнорировать?
     
  4. granatoleg

    granatoleg Активный пользователь

    С нами с:
    23 июл 2012
    Сообщения:
    2
    Симпатии:
    1
    Да вот так сложилось. У заказчика уже установлены windows-сервера, куплен и развернут MSSQL 2008. Теперь подрядили нас автоматизировать их рабочие прооцессы. Требования Заказчика: приложения должны быть "web-овские", работать только во внутренней (интранет) сети. Мы выбрали библиотеку ExtJS для клиентской части и PHP для серверной. БД, как уже отмечал, MSSQL - тут без вариантов. Вот как-то так.
    Четких указаний, как скрестить MSSQL и PHP я быстро не нашел, вместо этого на этом же форуме встретил только вопросы " а как настроить...?". Поскольку получилось быстро разобраться - решил поделиться опытом, авось кому из страждущих пригодится.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    потому что точка нет!
     
  6. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    ипался я как то с этой бедой....жесть конечно, сам так и не смог настроить.....шибко умный дядька помогал :(
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Спасибо, наверняка пригодится. Тут вечно кто-то страдает по этому поводу.
     
  8. foma_php

    foma_php Активный пользователь

    С нами с:
    2 окт 2012
    Сообщения:
    1
    Симпатии:
    0
    Это лучший мануал в сети по настройке PHP+MSSQL. Очень помогло.
     
  9. InterNet

    InterNet Активный пользователь

    С нами с:
    22 янв 2013
    Сообщения:
    1
    Симпатии:
    0
    наконец нашел нормально написанную инструкцию, но не помагает.
    стоит Apache 2.2.21 + PHP 5.3.18 + MSSQL 2008
    делаю все как описано, но модуль оно не подключает втупую(
    уже хз сколько раз переустанавливал разные версии с нуля - ноль реакции.
    я в отчаянии
     
  10. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    ?
     
  11. demorian

    demorian Активный пользователь

    С нами с:
    25 фев 2009
    Сообщения:
    111
    Симпатии:
    0
    Вопрос.. MSSQL 2005 ... Как быть? Что делать? Откатываться на ранние версии php???
     
  12. lx2004nt

    lx2004nt Активный пользователь

    С нами с:
    3 сен 2015
    Сообщения:
    41
    Симпатии:
    0
    Привет всем, заинтересовала ваша тема, скажите у меня MSSQL 2008 и PHP Version 5.6.12 можно ли таким образом подключить драйвера? К данной бд? то есть использовать этот драйвер под эту версию просто у меня ХАМРР. Буду ждать ваши ответы. С уважением Леонид.
     
  13. StepanAMK

    StepanAMK Новичок

    С нами с:
    24 июн 2016
    Сообщения:
    138
    Симпатии:
    5
    Привет всем, Вопрос, как можно подключится к БД удалённо к примеру не с апача который установлен на этом же компе где и SQL Server в к примеру с дома с домашнего компьютера
     
  14. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    @StepanAMK, для этого сервер базы данных должен быть настроен на разрешение подключения не с локального хоста. Как настроить - можно почитать в интернете.
    В таком случае в параметрах подключения передаётся не localhost, а ip-адрес сервера
     
  15. StepanAMK

    StepanAMK Новичок

    С нами с:
    24 июн 2016
    Сообщения:
    138
    Симпатии:
    5
    Как задать правельно вопрос что бы попасть на правельный путь?
    --- Добавлено ---
    1. $serverName = "<имя_вашего_sql-сервера\имя_инстанции,номер_порта>"; //если instance и port стандартные, то можно не указывать
    2. $connectionInfo = array("UID" => "<имя_пользователя>", "PWD" => "<пароль>", "Database"=>"<имяБД>");
    3. $conn = sqlsrv_connect( $serverName, $connectionInfo);

    4. if( $conn )
    5. {
    6. echo "Connection established.\n";
    7. }
    8. else
    9. {
    10. echo "Connection could not be established.\n";
    11. die( print_r( sqlsrv_errors(), true));
    12. }


    13. /* Close the connection. */
    14. sqlsrv_close( $conn);
    15. ?>
    Сдесь вообще про localhost нечего не прописано
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    окей, гугл, "школьный курс русского языка"
     
    StepanAMK и mr.akv нравится это.
  17. StepanAMK

    StepanAMK Новичок

    С нами с:
    24 июн 2016
    Сообщения:
    138
    Симпатии:
    5
    Адекватный ответ спасибо!
     
  18. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ну так лайкни, коли понравилось.
     
    StepanAMK и denis01 нравится это.
  19. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    @StepanAMK, как-нибудь типо "удалённое подключение к mssql".
    в явном виде нет, но оно предполагается в этой строчке
     
  20. StepanAMK

    StepanAMK Новичок

    С нами с:
    24 июн 2016
    Сообщения:
    138
    Симпатии:
    5
    Тоесть присерно так
    $serverName = "./good, 91.235.144.16:9855"; //если instance и port стандартные, то можно не указывать
    ?
    --- Добавлено ---
    я не жадный держи
     
    Ganzal нравится это.
  21. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    а хрен его знает, попробуй)
     
  22. Menoren

    Menoren Новичок

    С нами с:
    11 мар 2018
    Сообщения:
    1
    Симпатии:
    0
    огромное тебе СПАСИБО, добрый человек , спустя 5 лет