我正在尝试从Mac上的PHP连接到远程MS SQL Server数据库(最终在Ubuntu服务器上(使用FreeTDS和unixODBC,但即使我似乎已经正确设置了所有内容,但我收到iODBC错误,而且我'我不知道如何绕过他们 .
我正在使用MacPorts,所以我的配置是:
/opt/local/etc/freetds.conf ::
[bti_db]
host = 123.45.67.89 (IP address changed to protect the innocent)
port = 14333
tds version = 8.0
/opt/local/etc/odbcinst.ini:
[FreeTDS]
Description = TDS Driver (Sybase/MSSQL)
Driver = /opt/local/lib/libtdsodbc.so
Setup = /opt/local/lib/libtdsS.so
FileUsage = 1
/opt/local/etc/odbc.ini:
[bti_dsn]
Driver = FreeTDS
Description = My Database
Trace = no
Servername = bti_db
Database = btidata
但是,每当我尝试使用'bti_dsn'连接odbc_connect()
$conn = odbc_connect('bti_dsn;, $user, $pw);
我收到此错误:
警告:odbc_connect()[function.odbc-connect]:SQL错误:[iODBC] [驱动程序管理器]未找到数据源名称且未指定默认驱动程序 . 无法加载驱动程序,SQL状态IM002在SQLConnect中
在我的phpinfo()的ODBC部分中,我看到ODBC库定义为iodbc,而PHP是用'--with-iodbc = / usr'编译的,所以我猜测配置是我的问题 . 我如何解决这个问题,以便它使用我设置的unixODBC / FreeTDS?
谢谢 .
2 回答
iODBC默认安装为Mac OS X的一部分;自从Jaguar(10.2.x)以来 . 那里's no need for UnixODBC on Macs, and it can lead to lots of errors if you'不是一位认真的专家 . 有一个使用PHP with iODBC on Mac OS X的具体指南 . 为获得最佳效果,您可能还需要升级到最新的iODBC for Mac OS X .
/opt/local/etc
不应添加到$PATH
,通过.profile
或其他方式 .PHP肯定在UnixODBC之前找到iODBC,但这应该不是问题; UnixODBC和iODBC通常(并且意味着完全)API等效的ODBC驱动程序管理器 . 如果你真的关心那个部分,你可以改变
$DYLD_LIBRARY_PATH
(Mac OS X 's version of Linux' s$LD_LIBRARY_PATH
) - 但如果PHP与iODBC框架链接,而不是dylibs,这将没有任何区别 .(注意,
$DYLD_LIBRARY_PATH
也必须包含/opt/local/lib
,否则您的FreeTDS驱动程序将无法加载 . )对于特定错误您的报告 - PHP需要设置几个环境变量,如果您是're not using the Mac'的默认ODBC配置文件(系统级别在
/Library/ODBC/odbc[inst].ini
;用户级别在~/Library/ODBC/odbc[inst].ini
...如果存在~/.odbdc[inst].ini
文件,则它们应混合到~/Library/ODBC/
文件中,并用符号链接替换为相同的文件 .如果您不想使用这些默认文件,则必须设置
$ODBCINI
以定位您已定义DSN的odbc.ini
文件,并设置$ODBCINSTINI
以定位注册您要使用的驱动程序的odbcinst.ini
文件 .假设您要执行上述所有操作,应将这些行添加到
*.php
文件中(最好通过require
或include
语句以最大限度地减少将来的编辑) -我无法准确了解
DYLD_LIBRARY_PATH
设置,因为您没有指定UnixODBC库的位置 . 但是,如果您对iODBC是驱动程序管理器没问题,并且只是希望加载FreeTDS库,则以下情况应该有效 -我希望这有帮助 .
附:在您的DSN定义中,此行 -
{FreeTDS}
)包装,要么驱动程序库的完整路径(/opt/local/lib/libtdsodbc.so
)应该是值 .我假设您的
odbcinst.ini
中还有类似以下索引条目的内容 -odbc.ini
中的以下索引条目类似 -...但现在我注意到你的$ conn线可能只需要修正 . 看看
odbc_connect
的参数 .这应该看起来更像 -
它看起来像's not looking in your odbc.ini file. Maybe it'正在寻找
/etc/odbc.ini
和/etc/odbcinst.ini
?