Ошибка PHP-подключения к базе данных MS SQL с использованием PDO_DBLIB
Я пытаюсь использовать драйвер PHP PDO_DBLIB для подключения к удаленной базе данных, и у меня есть некоторые проблемы.
База данных подключается через ту же среду, используя telnet и клиент SQL. Однако подключение с использованием следующего кода в PHP не работает:
<?php
$conn = new PDO('dblib:dbname=TestDB;host=RemoteServer;charset=utf8', 'my_user', 'my_pass');
Запуск этого кода, будь то из командной строки или Apache, приводит к следующей ошибке:
Неустранимая ошибка: исключить исключение "PDOException" с сообщением "SQLSTATE [HY000] Не удается подключиться: Adaptive Server недоступен или не существует (серьезность 9)"
Я могу подключиться к базе данных, используя тот же код на другом веб-сервере, что заставляет меня думать, что это проблема конфигурации. Файлы php.ini на двух серверах выглядят относительно одинаковыми. У каждого из них есть те же библиотеки PDO, что и с теми же настройками.
Кто-нибудь знает, почему это может произойти?
Ответы
Ответ 1
Оказывается, это была гораздо более простая проблема, чем я думал. По какой-то причине сервер разработки не использовал порт 1433 в качестве порта по умолчанию в соединении и вместо этого использовал порт 4000.
Я обнаружил это, включив журналы в файле freetds.conf и отслеживая их, когда я делал запрос.
Также следует отметить: расширение DBLIB использует двоеточие (:) как разделитель между хостом и портом вместо запятой. К сожалению, ошибка, которую вы получаете при использовании запятой, не очень описательна, поэтому, надеюсь, кто-то приносит пользу от этого открытия.
Ответ 2
Запишите порт в freetds.conf непосредственно для этого хоста:
[RemoteServer]
host = RemoteServer
port = 1433
И оставить php-код, которым мы являемся:
$conn = new PDO('dblib:dbname=TestDB;host=RemoteServer;charset=utf8', 'my_user', 'my_pass');