Подключение php 7.2 к MS SQL с помощью sqlsrv

Я пытаюсь подключиться к MS SQL и запустить его через PHP на моей машине. Я использую IIS, у меня установлен PHP 7.2 и MS SQL Express 2017. У меня работает основная веб-страница, но когда я нажимаю, чтобы открыть страницу PHP, соединение не работает.

session_start();

echo "Hello ";
if (isset($_POST['submit'])) {
    $_SESSION["server"] = $_POST['server'];
    $_SESSION["database"]= $_POST['database'];
    $_SESSION["username"] = $_POST['username'];
    $_SESSION["password"] = $_POST['password'];

    echo $_SESSION["database"];

    //CONNECTION
    $serverName = $_SESSION["server"];
    $connectionInfo["Database"] = $_SESSION["database"];
    $connectionInfo["UID"] = $_SESSION["username"];
    $connectionInfo["PWD"] = $_SESSION["password"];

    echo "midway";

    $conn = sqlsrv_connect($serverName, $connectionInfo);

    echo "Bye";
}

Когда я запускаю это, я получаю сообщение "Hello размеры на полпути", что говорит о том, что страница работает до тех пор, пока не достигнет линии соединения.
Я не уверен, какое расширение sqlsrv использовать.
Я осмотрелся и могу найти версии для 7. и 7.1, но не для 7.2.

Я добавил extension=php_sqlsrv_71_nts_x86.dll в конец php.ini (и файл существует в C:\Program Files (x86)\PHP\v7.2\ext).

Любые указатели будут с благодарностью получены. Я потратил на это пару дней и не думаю, что добился чего-то.
Спасибо.


person Daves    schedule 28.12.2017    source источник
comment
Запустите сценарий, содержащий phpinfo();, и он выдаст страницу, показывающую, что поддерживается. Убедитесь, что драйвер MSSQL указан в списке.   -  person Alex Howansky    schedule 28.12.2017
comment
Да. phpinfo() покажет, есть ли у вас MSSQL= SQLSERVER   -  person halojoy    schedule 28.12.2017
comment
Спасибо, Алекс, я запустил это, и драйвера нет в списке. Означает ли это, что он не поддерживается или у меня просто нет драйвера или он недоступен?   -  person Daves    schedule 28.12.2017
comment
Извините, плохой подбор слов. Я должен был сказать, что в данный момент загружается, а не поддерживается. Вам нужно будет установить расширение, соответствующее вашей версии PHP.   -  person Alex Howansky    schedule 28.12.2017
comment
Глядя на официальный бинарный дистрибутив, я вижу, что он не включает предварительно скомпилированный драйвер MSSQL — я думаю, это проблема лицензирования?   -  person Alex Howansky    schedule 28.12.2017
comment
Я вижу версию Microsoft для v7.1, поэтому я думаю, что мне придется перейти на эту версию php.   -  person Daves    schedule 28.12.2017
comment
@Daves. Глядя на выпуски на GitHub (в частности, 5.1.1), похоже, есть драйверы для 7.2 — 'windows-7.2.zip' — хотя они помечены как предварительный выпуск   -  person ImClarky    schedule 28.12.2017


Ответы (5)


Я столкнулся с той же проблемой. Позже я обнаружил, что использую более старую версию файлов Microsoft SQL для PHP.

Для PHP 7.2 вы должны использовать версию 7.2 MS PHP SQL.

Эта версия недоступна на веб-сайте Microsoft. Я нашел его здесь https://github.com/Microsoft/msphpsql/releases.

Как только я использовал эти файлы, все работает нормально. Я использовал 64-битные файлы.

Затем вам нужно добавить эти строки в файл php.ini

extension=php_sqlsrv_72_nts.dll
extension=php_pdo_sqlsrv_72_nts.dll 
person Crennotech    schedule 18.05.2018
comment
Спасибо, сэкономил мне много времени - person Jayr; 17.10.2018

Что вам нужно определить,

  • Какая версия PHP
  • Используемая вами среда выполнения является Thread Safe или Non-Thread Safe.
  • Используемая вами среда выполнения — 64-разрядная или 32-разрядная.

Затем вы должны просмотреть страницу требований здесь

Проверьте версию PHP, которую вы используете, поэтому предпочитайте свой вопрос, это означает, что PHP 7.2 какое расширение SQL Server версии 5.3 лучше всего подходит.

Затем перейдите на загрузить страницу, выберите ссылку, соответствующую версии, которую вы предпочитаете. (в этом вопросе 5.3)

Загруженный файл будет самораспаковывающимся файлом EXE, а затем распакуется в нужное место.

вы увидите список dll файлов, подобных этим...

php_pdo_sqlsrvPHP 7.2nts_x64.dll
php_pdo_sqlsrvPHP 7.2nts_x86.dll
php_pdo_sqlsrvPHP 7.2ts_x64.dll
php_pdo_sqlsrvPHP 7.2ts_x86.dll
...
php_sqlsrv_72_ts_x86.dll

Какой смысл в названии этих файлов?

Как я уже говорил, что вам нужно определить, чтобы выбрать правильный файл расширения. Для расширения SQL Server требуется 2 файла с именами, начинающимися с php_pdo_sqlsrv_xxx и php_sqlsrv_xxx.

Следующее число означает вашу PHP версию, в данном случае PHP 7.2, поэтому вам нужно выбрать имя файла, в котором есть _72_.

Следующий номер означает вашу среду выполнения Thread Safe или Non-Thread Safe, что указано в имени файла _ts_ (Thread Safe) или _nts_ (Non-Thread Safe).

Следующее число означает вашу среду выполнения 32 бита или 64 бита, что указано в имени файла _x86 (32 бита) или _x64 (64 бита)

Поэтому проверьте свою среду PHP с помощью phpinfo() или запустите команду php --version на консоли, а затем обратите внимание на отображаемое сообщение, для моего компьютера оно выглядит так...

PHP 7.2.12 (cli) (built: Nov  8 2018 06:12:12) ( ZTS MSVC15 (Visual C++ 2017) x86 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

Судя по этой информации, я получил PHP 7.2, ZTS означает Thread Safe (Non-Thread Safe будет NTS), а x86 32 бита< /сильный>.

Итак, что я должен выбрать, так это расширение php_sqlsrv_72_ts_x86.dll и php_pdo_sqlsrv_72_ts_x86.dll.

Финал: скопируйте их в свою папку /php/ext и отредактируйте php.ini с именами этих двух файлов.

// example with my case
extension=php_pdo_sqlsrv_72_ts_x86
extension=php_sqlsrv_72_ts_x86

Затем сохраните файл php.ini и перезапустите сервер.

Проверьте свой результат, взглянув на phpinfo.php, который ДОЛЖЕН иметь pdo_sqlsrv на странице. Это означает, что ваша среда может запускать PHP и подключаться к SQL Server сейчас.

person Natta Wang    schedule 28.11.2018
comment
Привет, @Natta, можешь прислать мне dll-файлы, которые ты использовал? У меня точно такая же версия, и я пытаюсь загрузить драйверы из этого репозитория Git, но он не работает github.com/microsoft/msphpsql/releases/tag/v5.3.0 - person aslamdoctor; 25.05.2019
comment
Спасибо за быстрый ответ, уже разобрался. У меня была неправильная версия драйвера odbc. - person aslamdoctor; 26.05.2019
comment
Это так невероятно круто. Вы сэкономили мне столько времени! Спасибо за подробное объяснение. - person LatentDenis; 25.06.2019
comment
Та же версия, сделал точно так, как вы сказали, php -v работает успешно, то есть он нашел библиотеки DLL, однако на последнем шаге phpinfo() не находит ничего, связанного с pdo_sqlsrv - person Starwave; 21.01.2020
comment
Ложная тревога, оказывается, я перезапускал сервер Apache, но мне нужно было перезапустить сервер узла ›.‹ - person Starwave; 22.01.2020

Я решил это ~ Версия PHP 7.2.4

pdo_sqlsrv: 5.3.0+11108

1. загрузите правильную версию sqlsrv и sqlsrv pdo

2. поместите его в папку XAMPP\PHP\ext

3. после этого пропишите строку в php.ini > настройка модуля

расширение = php_pdo_sqlsrv_72_ts.dll

расширение = php_sqlsrv_72_ts.dll

4. давайте сделаем тест для MSSQL, все еще есть сообщение об ошибке, чтобы рекомендовать вам загрузить драйвер ODBC для SQL.

5. Перейдите к https://docs.microsoft.com/zh-tw/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-2017, затем скачать нужный файл

(у меня это утилиты командной строки 11 для SQL Server® X86)

6.запустите снова test.php все работает!

person Let's Yo    schedule 23.08.2018

Я наконец нашел решение. Все, что вам нужно сделать, это использовать эти расширения в php.ini файле.

php_sqlsrv_72_ts_x86.dll

php_pdo_sqlsrv_72_ts_x86.dll

и перезапустите XAMPP.

P.S. "Я использую PHP 7.2.5"

person Ravi Sigdel    schedule 21.05.2018

Как использовать файлы DLL SQL Server с версией PHP 7.2 на xampp

https://github.com/Microsoft/msphpsql/releases

Чтобы загрузить Windows DLL для PHP 7.1 или выше из репозитория PECL, перейдите на страницу SQLSRV или PDO_SQLSRV PECL.

https://pecl.php.net/package/sqlsrv/5.6.1/windows

https://pecl.php.net/package/pdo_sqlsrv/5.6.1/windows

ПРИМЕЧАНИЕ. Не забудьте удалить префикс «php_» при добавлении имени файла расширения dll в файл php.ini. например.

extension=pdo_sqlsrv extension=sqlsrv Не изменяйте фактическое имя файла, которое вы поместили в каталог /xampp/php/ext/.

«7.2 Thread Safe (TS) x86» работал у меня для расширений «sqlsrv» и «pdo_sqlsrv».

Перезапустите xampp или apache, после чего вы увидите включенное расширение pdo_sqlsrv при печати phpinfo() в тестовом файле php.

введите здесь описание изображения

person Kamlesh    schedule 19.08.2019