PHP PDO_mssql SQLSTATE [01002] Adaptive Server连接失败(严重级9)

时间:2014-07-22 19:01:34

标签: php sql-server database pdo freetds

我正在连接外部MSSQL数据库,以便从PHP55 / osx导出,我有一个奇怪的问题。

new \PDO("dblib:host={$hostname};dbname={$dbname}", $user, $pass);

抛出:

SQLSTATE[01002] Adaptive Server connection failed (severity 9)

但CLI的连接工作正确

tsql -S hostname -U user -P pass -L dbname:

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任何东西,连接到主机名,IP,有和没有端口,实例名称,另一个用户,TDS版本7.0,7.1,7.2,8.0,重新安装PHP和freetds

3 个答案:

答案 0 :(得分:6)

检查这些:

  1. 在磁盘上找到freetds.conf。它可能存在于几个地方,而tsql使用一个,而PHP使用另一个。最好是将它们符号链接到一个公共文件中并对其进行测试。请注意,该文件的常见位置是/ etc /或/ usr / local / etc /

    旁边的〜/ .freetds.conf
  2. 你的freetds.conf文件中应该有一个[global]部分。把这些行放在那里:

    tds version = 8.0

    文字大小= 20971520

    客户端字符集= UTF-8

  3. 当然,我希望您已经使用phpinfo()检查PHP加载了哪个驱动程序:mssql,sqlsrv或dblib

答案 1 :(得分:4)

这是一般失败消息。无论出于何种原因,您都无法连接到数据库。鉴于您使用OSX和brew很可能问题在于链接/加载共享库。 FreeTDS基于Sybase 8(与MS SQL Server一样)。使用。编译它有点神秘。

您的PHP是否与brew安装的libsybdb.dylib相关联? 如果您的服务器中包含phpinfo(),您应该能够找到它:

配置命令'--with-pdo-dblib = shared,/ usr / local / Cellar / freetds / 0.91 / lib'

要使其工作,您需要使用dblib选项编译/构建PHP。

答案 2 :(得分:1)

我的解决方案:

获取FreeTds

  • brew install freetds
  • 将freetds安装的lib /文件夹中的所有内容复制到PHP安装目录的lib /文件夹中,替换以下旧版本: 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安装目录中,替换旧版本