php dblib,错误:SQLSTATE [HY000]未知主机名称(严重性2)

时间:2015-04-10 20:35:59

标签: php sql-server macos pdo freetds

我正在使用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

2 个答案:

答案 0 :(得分:2)

我实际上通过删除php扩展文件夹中的mssql.so,pdo_dblib.so,重新下载php5.4,phpize并再次构建.so文件并将其放回来解决了这个问题。然后它工作。

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

答案 1 :(得分:0)

由于在没有真实文件信息的情况下无法通过代理调试此问题,并且您已选择使用虚拟文本保护IP地址和主机名。我将使用PHP代码。主机名应该是FQDN或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');
    }
?>