Fatal error: Call to undefined function db2_connect() using WAMP when trying to connect to Derby DB
Fatal error: Call to undefined function db2_connect() using WAMP when trying to connect to Derby DB
我希望有人能帮我解决这个错误。我知道它是由于 php 无法识别 php_ibm_db2.dll 模块而弹出的,但我已经尝试了所有方法,但没有任何效果。我找了教程,但是很多都是很老的,参考了旧版本的IBM产品,让我更难理解。
此处发布的较早的类似问题要么无人回答,要么含糊其辞。
以下是基础知识:
- 系统:Windows7 Pro 64位
- WAMP:2.5 64 位(Apache 是 2.4.9,PHP 是 5.5.12)
- 数据库:Derby,与 WAMP/localhost
位于同一台计算机上
我需要使用 php 连接到数据库并检索数据。我尝试使用 odbc,但我收到了 'Function Unsupported' 与 IBM DB2 ODBC Driver 和 IBM Data Server Driver for ODBC,所以我放弃了这个想法并决定改用 db2 函数。
这是我尝试过的方法:
- 从 here 下载的扩展:我得到了 5.5 ts 版本并将 .dll 复制到 PHP 的 ext 文件夹
- 在由 WAMP
链接的 php.ini 中添加了扩展名=php_ibm_db2.dll 行
- 安装了 IBM download page 中的所有内容。很蠢,但我不知道该怎么办了
- 检查 PATH、.ini 或 .conf 设置是否未指向正确的文件夹*
- 重新启动 WAMP
- 重新启动计算机
*我之前配置 PHP 以包含 Firebird headers,所以我知道我修改了正确的 .conf 和 .ini。 PHP文件夹也在环境变量中定义。
PHP 错误日志包含以下内容:
PHP Warning: PHP Startup: Unable to load dynamic library 'c:/wamp/bin/php/php5.5.12/ext/php_ibm_db2.dll' - %1 is not a valid Win32 application.
代码:
$username = "username";
$password = "password";
$hostname = "localhost";
$port = "1527";
$database="C:\Users\me\Desktop\dbname"; //not real definition
$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;"."HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;UID=$username;PWD=$password";
$connection = db2_connect($conn_string, '', '');
if ($connection) {
echo "Connection succeeded."."\n";
}
else {
echo "Connection failed."."\n";
echo db2_conn_errormsg ($connection);
}
提前致谢
感谢@RiggsFolly 和一个我没能再次找到的问题link,我现在想通了。
对于任何试图在 Windows x64 中启用 db2 功能并认为 php.net 安装指南不是很具体的人,这里是步骤(或者至少是我用来解决它的步骤):
安装 32 位 WAMPServer
安装IBM Express-C x32。这与 IBM DB2 ODBC 驱动程序一起提供。
根据您的PHP版本下载php_ibm_db2.dll。复制到 PHP 扩展文件夹并在 PHP.ini
中启用它
要为 x32 ODBC 驱动程序配置 DSN,请使用 C:\Windows\SysWOW64\odbcad32.exe.
中的 x32 ODBC 数据源管理器
重新启动 WAMPServer 并检查 PHPInfo()。 ibm db2 现在应该有它自己的部分
我希望这对某人有用。
或
只需从 PECL 下载合适的版本即可。我刚刚发现,我觉得超级愚蠢。
我希望有人能帮我解决这个错误。我知道它是由于 php 无法识别 php_ibm_db2.dll 模块而弹出的,但我已经尝试了所有方法,但没有任何效果。我找了教程,但是很多都是很老的,参考了旧版本的IBM产品,让我更难理解。
此处发布的较早的类似问题要么无人回答,要么含糊其辞。
以下是基础知识:
- 系统:Windows7 Pro 64位
- WAMP:2.5 64 位(Apache 是 2.4.9,PHP 是 5.5.12)
- 数据库:Derby,与 WAMP/localhost 位于同一台计算机上
我需要使用 php 连接到数据库并检索数据。我尝试使用 odbc,但我收到了 'Function Unsupported' 与 IBM DB2 ODBC Driver 和 IBM Data Server Driver for ODBC,所以我放弃了这个想法并决定改用 db2 函数。
这是我尝试过的方法:
- 从 here 下载的扩展:我得到了 5.5 ts 版本并将 .dll 复制到 PHP 的 ext 文件夹
- 在由 WAMP 链接的 php.ini 中添加了扩展名=php_ibm_db2.dll 行
- 安装了 IBM download page 中的所有内容。很蠢,但我不知道该怎么办了
- 检查 PATH、.ini 或 .conf 设置是否未指向正确的文件夹*
- 重新启动 WAMP
- 重新启动计算机
*我之前配置 PHP 以包含 Firebird headers,所以我知道我修改了正确的 .conf 和 .ini。 PHP文件夹也在环境变量中定义。
PHP 错误日志包含以下内容:
PHP Warning: PHP Startup: Unable to load dynamic library 'c:/wamp/bin/php/php5.5.12/ext/php_ibm_db2.dll' - %1 is not a valid Win32 application.
代码:
$username = "username";
$password = "password";
$hostname = "localhost";
$port = "1527";
$database="C:\Users\me\Desktop\dbname"; //not real definition
$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;"."HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;UID=$username;PWD=$password";
$connection = db2_connect($conn_string, '', '');
if ($connection) {
echo "Connection succeeded."."\n";
}
else {
echo "Connection failed."."\n";
echo db2_conn_errormsg ($connection);
}
提前致谢
感谢@RiggsFolly 和一个我没能再次找到的问题link,我现在想通了。
对于任何试图在 Windows x64 中启用 db2 功能并认为 php.net 安装指南不是很具体的人,这里是步骤(或者至少是我用来解决它的步骤):
安装 32 位 WAMPServer
安装IBM Express-C x32。这与 IBM DB2 ODBC 驱动程序一起提供。
根据您的PHP版本下载php_ibm_db2.dll。复制到 PHP 扩展文件夹并在 PHP.ini
中启用它
要为 x32 ODBC 驱动程序配置 DSN,请使用 C:\Windows\SysWOW64\odbcad32.exe.
中的 x32 ODBC 数据源管理器
重新启动 WAMPServer 并检查 PHPInfo()。 ibm db2 现在应该有它自己的部分
我希望这对某人有用。
或
只需从 PECL 下载合适的版本即可。我刚刚发现,我觉得超级愚蠢。