我正在连接外部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
答案 0 :(得分:6)
检查这些:
在磁盘上找到freetds.conf。它可能存在于几个地方,而tsql使用一个,而PHP使用另一个。最好是将它们符号链接到一个公共文件中并对其进行测试。请注意,该文件的常见位置是/ etc /或/ usr / local / etc /
旁边的〜/ .freetds.conf你的freetds.conf文件中应该有一个[global]部分。把这些行放在那里:
tds version = 8.0
文字大小= 20971520
客户端字符集= UTF-8
当然,我希望您已经使用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
编译并安装dblib扩展
ext/pdo_dblib
子文件夹
phpize
,确保它是您安装的正确二进制文件./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安装目录中,替换旧版本