Sage ODBC可通过Excel连接但PHP连接失效问题求助
PHP ODBC连接Sage 31版本失败的解决方案
问题复现
Sage升级至31版本后,PHP通过ODBC连接失效,但同一DSN可在Excel正常使用。已确认Sage、PHP、ODBC系统DSN均为32位,尝试PHP 8.4.4/8.1.3(32位)、PHP 8.1(64位)搭配对应驱动均失败:
- 使用PDO连接:
报错:$db = new PDO('odbc:MyName');The driver doesn't support the version of ODBC behaviour that the application requested. - 使用
odbc_connect连接:
报错:$db = odbc_connect('MyName');The driver returned invalid (or failed to return).
解决方案
1. 强制指定ODBC版本兼容参数
Sage 31的ODBC驱动可能仅支持ODBC 3.5及以下版本,PHP默认请求的版本可能不匹配,可通过连接参数或属性强制指定:
- PDO连接(指定ODBC版本属性):
$options = [ PDO::ATTR_ODBC_VERSION => PDO::ODBC_VERSION_3_50 ]; $db = new PDO('odbc:MyName', '你的用户名', '你的密码', $options); - PDO连接(直接在连接字符串添加参数):
$db = new PDO('odbc:MyName;ODBCVER=0x0350', '你的用户名', '你的密码'); odbc_connect连接(指定ODBC使用模式):$db = odbc_connect('MyName', '你的用户名', '你的密码', SQL_CUR_USE_ODBC);
2. 重置ODBC DSN配置并检查驱动路径
- 打开32位ODBC数据源管理器(
C:\Windows\SysWOW64\odbcad32.exe),删除现有DSN后重新创建,确保配置参数(如数据库路径、认证方式)与Excel中使用的完全一致。 - 检查系统PATH环境变量,确保32位ODBC驱动的安装目录(通常为
C:\Program Files (x86)\Sage\...下的驱动路径)优先级高于64位路径,避免PHP加载错误的驱动文件。
3. 启用ODBC跟踪定位细节
打开32位ODBC数据源管理器的「跟踪」选项卡,启用跟踪并设置日志文件路径。执行PHP连接代码后,查看跟踪日志,可获取驱动与PHP交互的详细错误信息,比如参数不兼容、驱动内部报错等,帮助定位核心问题。
4. 更换PHP ODBC扩展版本
部分PHP版本的ODBC扩展可能使用了与Sage驱动不兼容的SDK编译。尝试下载官方发布的非线程安全(NTS)版本PHP,或使用带有原生ODBC扩展的PHP安装包,避免第三方编译的扩展存在兼容性问题。
内容的提问来源于stack exchange,提问作者Antony
相关产品推荐
相关产品推荐

