Db2

為 php 配置客戶端 ibm_db2

  • April 20, 2017

我正在安裝一個帶有 nginx 和 php 的 RHEL 伺服器,它可以連接到 db2 數據庫,下載並安裝“IBM Data Server Client”包,還通過以下方式安裝 pecl 庫:

pecl 安裝 ibm_db2

但是,當我進行連接測試時,我會響應以下錯誤:

$$ IBM $$ $$ CLI Driver $$SQL10007N 無法檢索到消息“0”。原因程式碼:“3”。SQLCODE = -1390

我正在測試的程式碼是:

<?php
$database = 'mydb';
$user = 'usr';
$password = 'pass';
$hostname = 'ipaddr';
$port = 9501;

$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;" . "HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;UID=$user;PWD=$password;";
$conn = db2_connect($conn_string, '', '');

if ($conn) {
   echo "Connection succeeded.";
   db2_close($conn);
}
else {
   echo db2_conn_error();
   echo db2_conn_errormsg();
}

我錯過了什麼嗎?

編輯:

在網上搜尋我在phpe-ditors中找到的這個:

例如,如果您在 /home/db2inst1/ 中創建了一個名為 db2inst1 的 DB2 實例,則可以將以下行添加到 php.ini:

ibm_db2.instance_name=db2inst1

如果未在 php.ini 中設置此選項,則必鬚髮出以下命令來修改環境變數以啟用對 DB2 的訪問:

bash$ 源 /home/db2inst1/sqllib/db2profile

要使啟用 PHP 的 Web 伺服器能夠訪問這些功能,您必須在 php.ini 中設置 ibm_db2.instance_name 配置選項,或者在 Web 伺服器啟動腳本(通常是 /etc/init.d/httpd或 /etc/init.d/apache)。

問題是我不知道 ibm_db2.instance_name 的值是什麼

任何想法 ?

在@mustaccio 的幫助下,實現了以下操作:

首先我添加了使用者 db2inst1:     

db2inst1 使用者添加

然後,我生成了實例(不管它是什麼意思)              

/opt/ibm/db2/V10.5/instance/db2icrt db2inst1

編輯 php 配置文件 (/etc/php.ini) 以添加實例:     

extension = / usr/lib64/php/modules/ibm_db2.so 
ibm_db2.instance_name = db2inst1

編輯php-fpm服務的初始化文件(/etc/init.d/php-fpm),在我的例子中是執行php的,每次執行該服務的使用者下做db2profile腳本的源碼開始。

#for DB2
. /opt/ibm/db2/V10.5/cfg/db2profile

最後重啟服務:

php-fpm 重啟服務

非常感謝您的評論。

引用自:https://dba.stackexchange.com/questions/71607