我正在使用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部分中的驱动程序Flavor已启用freetds。

那是什么问题呢?对我应该做什么有任何想法吗?
任何协助将不胜感激。

这是我的odbcinst.ini:
[freetdS]
Description = v0.63 with protocol v8.0
Driver = /usr/local/Cellar/freetds/0.91_2/lib/libtdsodbc.so

最佳答案

我实际上通过删除php扩展文件夹中的mssql.so和pdo_dblib.so来解决此问题,重新下载php5.4,phpize并再次构建两个.so文件并放回原处。然后就可以了。

似乎我制作的olde pdo_dblib.so文件指向其他地方的另一个freetds.conf。

关于php - php dblib,错误: SQLSTATE[HY000] Unknown host machine name (severity 2),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29570235/

10-11 13:21