使用PDO_IBM将PHP转换为DB2错误:SQL驱动程序连接:-1390 [IBM] [CLIDRIVER] SQL10007N

amrnrhlw  于 2023-01-08  发布在  PHP
关注(0)|答案(1)|浏览(163)

在Ubuntu 22.04中,我尝试通过驱动程序pdo_ibm. so将PHP与DB2数据库连接起来
我遵循了本指南以及IBM文档:https://github.com/php/pecl-database-pdo_ibm
我已经将1.5.0版编译到. so文件中,并将其放置在相应的驱动程序文件夹中。
但是,我收到以下错误

SQL驱动程序连接:-1390 [IBM][CLIDRIVER] SQL10007N无法检索邮件"0"。原因代码为"3"。
使用以下PHP代码:

var_dump($dsn);
echo "". PHP_EOL;
var_dump($this->_config['username']);
var_dump($this->_config['password']);
var_dump($this->_config['driver_options']);

$this->_connection = new PDO(
$dsn,
$this->_config['username'],
$this->_config['password'],
$this->_config['driver_options']
);

/*$this->_connection = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=testdb;" .
"HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;", "db2inst1", "123456", array(
PDO::ATTR_PERSISTENT => FALSE, 
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
); */

我正在使用以下env变量,在~/. bashrc文件中设置:

ODBCHOME=/home/poc-dev/etc

ODBCINI=/home/poc-dev/clidriver/system_odbc.ini

DB2INSTANCE=db2inst1

DB2HOME=/home/poc-dev/clidriver

IBM_DB_HOME=/home/poc-dev/clidriver

LD_LIBRARY_PATH=/home/poc-dev/clidriver/lib

_=/usr/bin/printenv

我已成功地将DBeaver和ISql连接到数据库
我错过了什么?
编辑:运行PHP的用户是apache envars的"www-data"图像:

rmbxnbpk

rmbxnbpk1#

Apache 2使用“www-data”用户来运行PHP,正如用户mao指出的那样,“www-data”必须在所有意义上都具有对DB2 CLIDRIVER的完全访问权限。
我发现我不得不在etc/environroment文件中放置与~/.bashrc完全相同的变量(我错误地认为我使它们成为全局变量),在我这样做之后,我可以看到环境变量作为“www-data”用户,我通过命令验证:

sudo -u www-data printenv

我确认了DB2 CLIDRIVER文件夹的ENV变量:/home/poc-dev/clidriver在那里,但他们有755权限,我需要通过命令更改为777权限:

sudo chmod 777 -R /home/poc-dev/

之后,我通过命令在用户“www-data”上测试了ISQL命令(自从我第一次意识到我收到ISQL找不到其中一个库的消息以来,这被证明是权限问题):

sudo -u www-data isql TEST db2inst1 123456

“TEST”是在odbc.ini中注册的DSN,“db2 inst 1”是数据服务器上的用户(在本例中是虚拟机)
然后,我继续用途:

$this->_connection = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=testdb;" .
"HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;", "db2inst1", "123456", array(
PDO::ATTR_PERSISTENT => FALSE, 
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);

在PHP中。希望这能帮助一些人

相关问题