Ответ 1
Ok. Трудно отладить проблему с сервером, не находясь на сервере, но я много сделал с php и SQL Server, поэтому сделаю все возможное, чтобы поделиться своими впечатлениями.
Во-первых, очень рад, что вы обновили из 5.3.1, что версия php является древней и очень неуверенной. Вот несколько проверок работоспособности вашей системы. Это может ничего не сделать для вас, но все это стоит проверить.
-
Сначала убедитесь, что вы можете подключиться к серверу sql, используя студию SQL Server Management, с предоставленными вами учетными данными. Это означает те же учетные данные, которые вы используете в php, а не учетные данные проверки подлинности Windows. Одновременно вы можете иметь оба соединения, чтобы вы могли вносить изменения и одновременно проверять соединение.
- Включить tcp. Менеджер конфигурации сервера sql → Конфигурация сети SQL Server → протоколы для sqlexpress → tcp/ip (правый щелчок) → свойства → Включено (да) → IP-адреса → IPAll → TCP-порт 1433 → ok
- Включить аутентификацию сервера SQL. Выберите сервер (щелкните правой кнопкой мыши) → свойства → безопасность → сервер и режим проверки подлинности Windows → ok
- Откройте серверный порт sql на брандмауэре. Панель управления Windows → система и безопасность → брандмауэр Windows → расширенные настройки → Входящие правила → Новое правило → Порт → tcp → 1433 (или что-то еще) → Разрешить подключение → next → Name → sql server → finish → restart computer.
- Конечно, если вы хотите подключиться через нестандартного пользователя, вам нужно добавить пользователя: sql server → security → logins (щелкните правой кнопкой мыши) → добавить логин → роли сервера → sysadmin → ok
- Если вы сделаете какие-либо из этих изменений, перезапустите сервер sql: Sql server configuration manager → sql server services → sql Server (щелкните правой кнопкой мыши) → перезапустите.
-
Как только вы подтвердите, что можете подключиться к студию управления, здесь находятся проверки конфигурации php:
- Вы можете узнать, доступно ли само расширение, создав в нем страницу php с функцией
phpinfo()
. Затем найдите pdo_sqlsrv. Если он присутствует, остальные из этих проверок, вероятно, не нужны, но поскольку вы работали так долго, вероятно, все равно их проверяете. - sql_srv расширение для php должно быть версии 3.2 для php 5.6, вы можете получить эту библиотеку здесь
- Версия 3.2 требует наличия os-расширения здесь Проверьте другие требования по предыдущей ссылке. Ваш os может использовать другое расширение из связанного здесь.
- Найдите свой каталог расширений php. Обычно это {php-install-directory}/ext. Убедитесь, что вы скопировали соответствующую версию загруженных библиотек sqlsrv в этот каталог. Mine называются "php_sqlsrv_55_ts.dll" и "php_dpo_sqlsrv_55_ts.dll". У вас будет 56 вместо 55, я думаю, и "ts" должен соответствовать вашей установке php. "ts" означает "безопасный поток", другой вариант "nts" не является безопасным для потоков. Тот, который вы используете, зависит от вашей установки php.
- Мой файл php.ini содержит эти строки
extension=php_sqlsrv_55_ts.dll
иextension=php_pdo_sqlsrv_55_ts.dll
в этом порядке. но я не думаю, что порядок имеет значение. и снова ваш будет 56, а "ts" может быть "nts". - Если вы внесли какие-либо изменения на основе этих данных, обязательно перезапустите apache, затем проверьте, находится ли pdo_sqlsrv в вашем отчете phpinfo(). Также после перезапуска apache проверьте журнал ошибок apache и php, чтобы узнать, не возникли ли у вас конкретные ошибки в PHP, пытающиеся загрузить расширения. Отправьте их здесь, если вам нужна помощь с ними.
- Вы можете узнать, доступно ли само расширение, создав в нем страницу php с функцией
-
Как только вы подключитесь к серверу sql через auth creditionals в студии управления и посмотрите pdo_sqlsrv в phpinfo(), вот последние вещи, которые нужно изучить в вашем коде.
-
Ваш код выше для расширения mssql. Вероятно, вы просто не обновили его своими последними изменениями. Для расширения сервера sql ваш код должен выглядеть так:
$connectionInfo = array( 'UID' => $dbuser, 'PWD' => $dbpass, 'LoginTimeout' => 1, ); $host = $host . ', ' . $port; $connection = sqlsrv_connect($host, $connectionInfo); $error_messages = sqlsrv_errors();
-
Для проверки подлинности Windows исключить uid и pwd.
$connectionInfo = array(); $conn = sqlsrv_connect( $host, $connectionInfo);
-
Если у вас появилось больше проблем, сообщите мне, какой шаг не работает, поэтому мы можем более подробно изучить этот шаг.