【发布时间】:2014-01-12 23:01:02
【问题描述】:
我正在尝试通过在 Ubuntu 11.04 服务器上运行的 PHP 连接到 SQL Azure 数据库。
服务器运行 PHP 版本 => 5.3.5-1ubuntu7.11。
我已经多次使用 apt-get install 安装了 freetds-bin、freetds-common、tdsodbc、odbcinst、php5-odbc 和 unixodbc。我尝试编译带有 SSL 支持的 FreeTDS,但不确定是否成功。
此时,我在尝试使用 isql 工具进行连接时收到错误“08S01 - 通信链路故障”。 Microsoft 文章将该错误解释为“在 SQLDriverConnect 函数完成处理之前,驱动程序与驱动程序尝试连接的数据源之间的通信链接失败。”对此的一些研究特别指出 FreeTDS 中缺乏 SSL 支持,但我不清楚如何验证它是否已启用。
我将使用 PHP 数据对象或 mssql_* 函数连接到 SQL Azure 数据库。我对PDO不太熟悉,但是好像PDO不一定要用ODBC?我对此不太清楚,我怀疑它会导致我对 isql 看到的问题进行故障排除,这些问题与我在 PHP 中看到的问题无关。 isql 工具的连接问题是否与 PHP 中的 PDO 或 mssql_* 函数中的连接问题有关?
我最近使用 PDO 的尝试是:
<?php
$c = new PDO("odbc:Driver=FreeTDS;Port=1433;Server=sssssssssss.database.windows.net;Database=db_xxxxx_xxx_xxx;UID=db_xxxxx_xxx_xxx_ExternalWriter;PWD=ppppppppp");
?>
此代码在我的 Apache 日志文件中生成以下错误:
[2013 年 12 月 24 日星期二 13:23:10] [错误] [客户端 10.1.1.11] PHP 致命错误: 带有消息“SQLSTATE [08S01]”的未捕获异常“PDOException” SQLDriverConnect: 20004 [unixODBC][FreeTDS][SQL Server]从 /var/www/test/pdo.php:3\n堆栈跟踪:\n#0 中的服务器失败 /var/www/test/pdo.php(3): PDO->__construct('odbc:Driver=Fre...')\n#1 {main}\n 在第 3 行的 /var/www/test/pdo.php 中抛出
我的 /etc/freetds/freetds.conf:
[global]
# TDS protocol version
tds version = 9.1
# Whether to write a TDSDUMP file for diagnostic purposes
# (setting this to /tmp is insecure on a multi-user system)
dump file = /tmp/freetds.log
debug flags = 0xffff
# Command and connection timeouts
; timeout = 10
; connect timeout = 10
# If you get out-of-memory errors, it may mean that your client
# is trying to allocate a huge buffer for a TEXT field.
# Try setting 'text size' to a more reasonable limit
text size = 64512
# A typical Microsoft server
[FreeTDS]
host = ssssssssss.database.windows.net
port = 1433
tds version = 9.1
client charset = UTF-8
/etc/odbc.ini:
[TS]
Description = "test"
Driver = FreeTDS
Server = sssssssssssss.database.windows.net
Port = 1433
Database = db_xxxxxxx_xxx_xxx
/etc/odbcinst.ini
[FreeTDS]
Description = tdsodbc
Driver = /usr/lib/odbc/libtdsodbc.so
对于这个混乱的任何帮助将不胜感激。我显然在这一点上迷路了。谢谢!
【问题讨论】:
-
我已经按照 freetds.org/userguide/config.htm 的 FreeTDS 文档配置 FreeTDS 和 freetds.org/userguide/install.htm 安装它。 tsql -H sss.database.windows.net -p 1433 -U user -P pwd 现在返回“无法打开登录请求的服务器 'sss'。不允许 IP 地址为 'nnnn' 的客户端访问服务器。启用访问、使用 Windows Azure 管理门户或运行....”显然错误来自 Azure,并且至少正在进行连接。 SQL Azure 防火墙配置为允许来自任何计算机的连接。
标签: php sql-server azure azure-sql-database ubuntu-11.04