【发布时间】:2014-03-01 06:29:59
【问题描述】:
我正在尝试在 Ubuntu 12.04 上安装 PHP 5.3.10,以使用 ODBC (unixODBC) 连接到远程 SQL Anywhere 12 (Sybase?) 服务器。但是,PHP 的执行在 odbc_connect() 处停止。
PHP 代码:
$odbc = odbc_connect('DSN=TP189902;', 'username', 'password');
if ($odbc)
{
echo 'Connected';
}
else
{
echo 'Failed: '.odbc_error($odbc);
}
因此,无论它是否连接,它都应该输出其中一个回声,但事实并非如此。如果我尝试改用 PHP 的 PDO 库,我会得到相同的结果。
我的 unixODBC 设置如下所示。这可能是我的错误所在,因为我以前从未在 linux 上设置过 ODBC,也不是很熟悉。
odbcinst.ini
[SQL Anywhere 12]
Description = SQL Anywhere 12
Driver = /opt/sqlanywhere12/lib64/libdbodbc12.so
Setup = /opt/sqlanywhere12/lib64/libdbodbc12.so
odbc.ini
[TP189902]
Description = TP189902
Uid = username
Pwd = password
Driver = SQL Anywhere 12
ServerName = 189902
CommLinks = tcpip(Host=1.2.3.4)
DatabaseName = DB189902
我还尝试了很多替代方法,例如使用驱动程序的路径作为驱动程序值,使用 Host=1.2.3.4 而不是 CommLinks,等等。
此外,命令isql -v TP189902 username password 不会输出任何内容,除非我给它一个假的 DSN 以便它输出和错误。
我还验证了 libdbodbc12.so 与 isql 的架构相同,并且具有所有依赖项。
除此之外,我在运行 WAMP 的 Windows 7 机器上进行了非常相似的设置,可以很好地连接(同时使用 ODBC 和 PDO 库)。我在上面使用了相同的 DSN 详细信息。
编辑:我也尝试过跳过 DSN,但结果相同。它也适用于 Windows 机器。
$odbc = odbc_connect('Driver={SQL Anywhere 12};Server=189902;CommLinks=tcpip(Host=1.2.3.4);', 'username', 'password');
【问题讨论】:
标签: php ubuntu odbc sybase sqlanywhere