unixodbc php,iODBC错误尝试使用unixODBC / FreeTDS连接到PHP中的MS SQL Server

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 语句以最大限度地减少将来的编辑) -

putenv("DYLD_LIBRARY_PATH=/path/to/odbcsdk/lib;$DYLD_LIBRARY_PATH");

putenv("ODBCINSTINI=/path/to/odbcinst.ini");

putenv("ODBCINI=/path/to/odbc.ini");

我无法准确了解 DYLD_LIBRARY_PATH 设置,因为您没有指定UnixODBC库的位置 . 但是,如果您对iODBC是驱动程序管理器没问题,并且只是希望加载FreeTDS库,则以下情况应该有效 -

putenv("DYLD_LIBRARY_PATH=/opt/local/lib;$DYLD_LIBRARY_PATH");

putenv("ODBCINSTINI=/opt/local/etc/odbcinst.ini");

putenv("ODBCINI=/opt/local/etc/odbc.ini");

我希望这有帮助 .

附:在您的DSN定义中,此行 -

Driver = FreeTDS

应该改写 . 要么是人性化的驱动程序名称应该用大括号( {FreeTDS} )包装,要么驱动程序库的完整路径( /opt/local/lib/libtdsodbc.so )应该是值 .

Driver = {FreeTDS}

Driver = /opt/local/lib/libtdsodbc.so

我假设您的 odbcinst.ini 中还有类似以下索引条目的内容 -

[ODBC Drivers]

FreeTDS = Installed

和 odbc.ini 中的以下索引条目类似 -

[ODBC Data Sources]

bti_dsn = FreeTDS

...但现在我注意到你的$ conn线可能只需要修正 . 看看 odbc_connect 的参数 .

$conn = odbc_connect('bti_dsn;, $user, $pw);

这应该看起来更像 -

$conn = odbc_connect("bti_dsn", "$user", "$pw");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值