sql server — php dblib, ошибка: SQLSTATE [HY000] Неизвестное имя хост-компьютера (серьезность 2)

Я использую компьютер Mac OSX 10.9. Freetds и unixODBC уже установлены на моем компьютере и добавлены в качестве расширения к php, пытаясь подключиться к удаленному серверу MSSQL. Ниже мое тестирование соединения:

<?php
$dbh = new PDO('dblib:host=Hostname ;dbname=Dbname', 'user', 'pw');
if (!$dbh) {
die('Something went wrong while connecting to MSSQL');
}
?>

Файл журнала ошибок показывает:

[error] [client 127.0.0.1] PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] Unknown host machine name (severity 2)

В чем может быть проблема ? Кажется, что мои freetds и unixODBC работают нормально, если я использую терминал для подключения к той же базе данных, как показано ниже:

$ isql Hostname user pw
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

а также

$ tsql -S Hostname  -U user
Password:
locale is "en_US.UTF-8"locale charset is "UTF-8"using default charset "UTF-8"1>

вот мой freetds.conf

[global]
# TDS protocol version
tds version = 8.0
[Hostname]
host = IP
port = 1433
tds version = 8.0
client charset = UTF-8 ##needed on MAC OS X
dump file = /tmp/freetds.log

и мой odbc.ini

[Hostname]
#Driver=/usr/local/lib/libtdsodbc.so
Driver = /usr/local/Cellar/freetds/0.91_2/lib/libtdsodbc.so
Trace=No
Server=IP
Port=1433
TDS_Version=8.0
client charset = UTF-8

Мой phpinfo () показывает, что расширение было добавлено, в разделе PDO есть dblib, а в разделе pdo_dblib есть freetds с поддержкой драйвера.

Так в чем проблема? Есть идеи, что мне делать?
Любая помощь будет высоко оценена.

вот мой odbcinst.ini:

[freetdS]
Description = v0.63 with protocol v8.0
Driver = /usr/local/Cellar/freetds/0.91_2/lib/libtdsodbc.so

7

Решение

Я на самом деле решил этот вопрос, удалив оба файла mssql.so, pdo_dblib.so в папке расширения php, заново загрузив php5.4, phpize, собрав оба файла .so и снова поместив их обратно. Тогда это работает.

Кажется, что файл olde pdo_dblib.so, который я сделал, указал на другой файл freetds.conf где-то еще.

2

Другие решения

Поскольку это невозможно отладить с помощью прокси-сервера без информации о реальных файлах, и вы решили защитить IP-адреса и имена хостов фиктивным текстом. Я собираюсь с кодом PHP. Имя хоста должно быть полным доменным именем или IP-адресом. Не заполнитель текста из INI-файлов.

<?php
$dbh = new PDO('dblib:host=[ ip address || example.com || localhost] ;dbname=Dbname', 'user', 'pw');
if (!$dbh)
{
die('Something went wrong while connecting to MSSQL');
}
?>
0

По вопросам рекламы [email protected]