在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"图像:
1条答案
按热度按时间rmbxnbpk1#
Apache 2使用“www-data”用户来运行PHP,正如用户mao指出的那样,“www-data”必须在所有意义上都具有对DB2 CLIDRIVER的完全访问权限。
我发现我不得不在etc/environroment文件中放置与~/.bashrc完全相同的变量(我错误地认为我使它们成为全局变量),在我这样做之后,我可以看到环境变量作为“www-data”用户,我通过命令验证:
我确认了DB2 CLIDRIVER文件夹的ENV变量:/home/poc-dev/clidriver在那里,但他们有755权限,我需要通过命令更改为777权限:
之后,我通过命令在用户“www-data”上测试了ISQL命令(自从我第一次意识到我收到ISQL找不到其中一个库的消息以来,这被证明是权限问题):
“TEST”是在odbc.ini中注册的DSN,“db2 inst 1”是数据服务器上的用户(在本例中是虚拟机)
然后,我继续用途:
在PHP中。希望这能帮助一些人