PHP PDO_mssql SQLSTATE[01002] Adaptive Server 连接失败(严重性 9)
Posted
技术标签:
【中文标题】PHP PDO_mssql SQLSTATE[01002] Adaptive Server 连接失败(严重性 9)【英文标题】:PHP PDO_mssql SQLSTATE[01002] Adaptive Server connection failed (severity 9) 【发布时间】:2014-09-13 18:13:13 【问题描述】:我正在连接到外部 MSSQL 数据库以从 php55/osx 导出,但我遇到了奇怪的问题。
代码:
new \PDO("dblib:host=$hostname;dbname=$dbname", $user, $pass);
抛出:
SQLSTATE[01002] Adaptive Server connection failed (severity 9)
但来自 CLI 的连接工作正常
tsql -S 主机名 -U 用户 -P 通行证 -L 数据库名:
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
有什么想法吗?我几乎尝试过任何东西,连接到主机名、ip、有和没有端口、连接到实例名称、另一个用户、TDS 版本 7.0、7.1、7.2、8.0,重新安装 php 和 freetds
【问题讨论】:
您是否尝试过在连接中不包括dbname
,然后使用mssql_select_db
?
你能试试像 ODBC 这样的驱动吗?我已经用 dblib 显示了奇怪的结果。
如上所说,也可能和你的dbname属性有关。
我尝试过 ODBC,但我根本无法连接。可能我设置错了。我真的更喜欢 dblib,因为我的抽象(Laravel Eloquent ORM)支持它。即使没有 dbname 我也试过了,但没有帮助
我也有同样的问题。并尝试了一切,但没有成功。唯一的区别是当我执行tsql -C
时,我得到TDS version: 5.0
。
【参考方案1】:
检查这些:
在您的磁盘上找到 freetds.conf。它可能存在于多个地方,tsql 使用一个,而 PHP 使用另一个。最好的方法是将它们符号链接到一个通用文件中并对其进行测试。请注意,该文件的常见位置是 /etc/ 或 /usr/local/etc/ 旁边的 ~/.freetds.conf
你的 freetds.conf 文件中应该有一个 [global] 部分。把这些行放在那里:
tds 版本 = 8.0
文字大小 = 20971520
客户端字符集 = UTF-8
当然,我希望您已经使用 phpinfo() 检查了 PHP 加载了哪个驱动程序:mssql、sqlsrv 或 dblib
【讨论】:
【参考方案2】:我的解决方案:
获取 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 --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安装目录,替换旧版本
【讨论】:
以上是关于PHP PDO_mssql SQLSTATE[01002] Adaptive Server 连接失败(严重性 9)的主要内容,如果未能解决你的问题,请参考以下文章
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: nodename or servname provided,
致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE [42000]:语法错误或访问冲突 PHP 和 PDO
SQLSTATE [42000]:语法错误或访问冲突:1064 PHP/MySQL [关闭]
PHP:SQLSTATE [42000]:语法错误或访问冲突:1064
PHP + MYSQL + Laravel - “SQLSTATE [HY000] [2002] 连接被拒绝” [重复]