PHP使用odbc_connect连接Firebird数据库失败求助
Firebird ODBC连接PHP问题排查
我尝试通过ODBC配置连接Firebird数据库,已完成ODBC驱动配置。
我编写了三段PHP代码尝试连接:
第一段代码
<?php $user = "SYSDBA"; $password = "masterkey"; $dsn= "DRIVER={Devart ODBC Driver for Firebird};Database=bazatestowa;Server=localhost;Port=3050"; $con=odbc_connect($dsn,$user,$password); if($con){ echo "Connected"; }else{ echo "Failed"; } ?>
运行报错:
Warning: odbc_connect(): SQL error: [Microsoft][ODBC驱动管理器] 未找到数据源名称且未指定默认驱动,SQL状态IM002于SQLConnect中,位置:C:\Integracja-skrypty\index.php第5行
第二段代码
<?php $user = "SYSDBA"; $password = "masterkey"; $dsn= "DRIVER={bazatestowa}"; $con=odbc_connect($dsn,$user,$password); if($con){ echo "Connected"; }else{ echo "Failed"; } ?>
运行后出现相同的IM002错误。
第三段代码
<?php $user = "SYSDBA"; $password = "masterkey"; $dsn= "bazatestowa"; $con=odbc_connect($dsn,$user,$password); if($con){ echo "Connected"; }else{ echo "Failed"; } ?>
运行报错:
PHP Warning: odbc_connect(): SQL error: [Microsoft][ODBC驱动管理器] 指定的DSN包含驱动程序与应用程序之间的架构不匹配,SQL状态IM014于SQLConnect中,位置:C:\Integration-scripts\index.php第5行
问题分析与解决建议
IM002错误原因:
- 第一段代码中驱动名称可能不准确,需确认ODBC驱动的官方名称(比如是否区分32位/64位,名称是否为
{Devart ODBC Driver for Firebird 64-bit}这类带版本标识的格式)。 - 第二段代码错误将数据库名当作驱动名称,
DRIVER参数必须填写ODBC驱动的官方名称,而非数据库名。
- 第一段代码中驱动名称可能不准确,需确认ODBC驱动的官方名称(比如是否区分32位/64位,名称是否为
IM014错误原因:
- 这是典型的32位/64位架构不匹配问题:
- 若PHP为32位版本,必须使用32位Firebird ODBC驱动,且在32位ODBC数据源管理器(
C:\Windows\SysWOW64\odbcad32.exe)中配置DSN; - 若PHP为64位,需用64位驱动和64位ODBC管理器(
C:\Windows\System32\odbcad32.exe)配置。
- 若PHP为32位版本,必须使用32位Firebird ODBC驱动,且在32位ODBC数据源管理器(
- 这是典型的32位/64位架构不匹配问题:
正确的DSN配置方式:
- 方式一:使用系统DSN
确保在对应架构的ODBC管理器中创建了名为bazatestowa的系统DSN,直接用DSN名连接:$dsn = "bazatestowa"; $con = odbc_connect($dsn, $user, $password); - 方式二:使用无DSN连接
确认驱动名称准确,补充完整数据库文件路径(Windows路径需用双反斜杠转义):$dsn = "DRIVER={Devart ODBC Driver for Firebird};Database=C:\\your\\path\\bazatestowa.fdb;Server=localhost;Port=3050;Charset=UTF8"; $con = odbc_connect($dsn, $user, $password);
- 方式一:使用系统DSN
内容的提问来源于stack exchange,提问作者Liti
相关产品推荐
相关产品推荐

