Ошибка PHP при подключении к базе данных MS SQL с использованием PDO_DBLIB - PullRequest
10 голосов
/ 18 августа 2011

Я пытаюсь использовать драйвер 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 с одинаковыми параметрами.

Кто-нибудь знает, почему это может происходить?

Ответы [ 2 ]

16 голосов
/ 18 августа 2011

Оказывается, это было гораздо проще, чем я думал. По какой-то причине сервер разработки не использовал порт 1433 в качестве порта по умолчанию в соединении и вместо этого использовал порт 4000.

Я обнаружил это, включив журналы в файле freetds.conf и отслеживая их во время выполнения запроса.

Кроме того, кое-что следует отметить: расширение DBLIB использует двоеточие (:) в качестве разделителя между хостом и портом вместо запятой. К сожалению, ошибка, которую вы получаете, когда используете запятую, не очень наглядна, поэтому, надеюсь, кто-то извлечет выгоду из этого открытия.

3 голосов
/ 13 ноября 2013

Запись порта в freetds.conf непосредственно для этого хоста:

[RemoteServer]
    host = RemoteServer
    port = 1433

И оставьте нам php-код:

$conn = new PDO('dblib:dbname=TestDB;host=RemoteServer;charset=utf8', 'my_user', 'my_pass');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...