PHP PDO_mssql SQLSTATE [01002] Не удалось подключиться к адаптивному серверу (серьезность 9)
Я подключаюсь к внешней базе данных MSSQL для экспорта из PHP55/osx, и у меня есть странная проблема.
код:
new \PDO("dblib:host={$hostname};dbname={$dbname}", $user, $pass);
броски:
SQLSTATE[01002] Adaptive Server connection failed (severity 9)
но соединение с CLI работает исправно
tsql -S имя хоста -U пользователь -P pass -L имя_базы:
locale is "cs_CZ.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1>
freetds.conf:
[hostname]
host = ipaddress
port = 1433
tds version = 8.0
tsql -C:
Version: freetds v0.91
freetds.conf directory: /usr/local/Cellar/freetds/0.91/etc
MS db-lib source compatibility: no
Sybase binary compatibility: no
Thread safety: yes
iconv library: yes
TDS version: 7.1
iODBC: no
unixodbc: no
SSPI "trusted" logins: no
Kerberos: no
Любые идеи? Я пробовал alomost что угодно, подключился к hostname, ip, с и без порта, к имени экземпляра, другому пользователю, TDS версии 7.0,7.1,7.2,8.0, переустановить php и freetds
Ответы
Ответ 1
Отметьте:
-
найдите freetds.conf на вашем диске. Возможно, он существует в нескольких местах, а tsql использует один, а PHP - другой. Лучше всего символизировать их в один общий файл и проверить на это. Обратите внимание: общее место для этого файла - ~/.freetds.conf рядом с/etc/или/usr/local/etc/
-
должен быть раздел [global] вашего файла freetds.conf. Поместите туда следующие строки:
tds version = 8.0
размер текста = 20971520
клиент charset = UTF-8
Конечно, я ожидаю, что вы уже проверили, какой драйвер загружается PHP с помощью phpinfo(): mssql, sqlsrv или dblib
Ответ 2
Это общее сообщение об ошибке. По какой-либо причине вы не можете подключиться к базе данных. Учитывая, что вы используете OSX и brew, скорее всего, проблема заключается в связывании/загрузке разделяемой библиотеки. FreeTDS основан на Sybase 8 (как и MS SQL Server). Это немного загадочно для компиляции с.
Был ли ваш PHP связан с libsybdb.dylib, который устанавливает brew?
Вы должны иметь возможность узнать, используя phpinfo(), если это включено в ваш сервер:
Настроить команду '--with-pdo-dblib = shared,/usr/local/Cellar/freetds/0.91/lib'
Чтобы заставить его работать, вам нужно скомпилировать/создать свой PHP с помощью опции dblib.
Ответ 3
Мое решение:
Получить FreeTds
brew install freetds
- скопируйте все в папке lib/вашей установки freetds в папку lib/вашей директории установки PHP, заменив старые версии: libct.4.dylib, libct.a, libct.dylib, libsybdb.5.dylib, libsybdb. a, libsybdb.dylib
Скомпилируйте и установите расширение dblib
- загрузите исходный код php для любой установленной вами версии php
- перейдите в подпапку
ext/pdo_dblib
источника
- запустите
phpize
, убедившись, что это правильный бинарный файл для вашей установки
- выполните команду configure, например, с помощью параметры:
./configure --with-php-config=/usr/local/php5/bin/php-config --with-pdo-dblib=/usr/local/Cellar/freetds/0.95.19/
- запустить
make
- скопируйте
modules/pdo_dblib.so
в каталог установки PHP, заменив старую версию