簡體   English   中英

PHP 到 DB2 與 PDO_IBM 錯誤:SQLDriverConnect:-1390 [IBM] [CLIDRIVER] SQL10007N

[英]PHP to DB2 with PDO_IBM Error : SQLDriverConnect: -1390 [IBM] [CLIDRIVER] SQL10007N

在 Ubuntu 22.04 我試圖通過驅動程序 pdo_ibm.so 將 PHP 與 DB2 數據庫連接起來

我遵循了本指南以及 IBM 文檔: https://github.com/php/pecl-database-pdo_ibm

我已經編譯了 1.5.0 版本。 進入“.so”文件並將其放置在相應驅動程序的文件夾中。

但是我收到以下錯誤

在此處輸入圖像描述

SQLDriverConnect:-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)
); */

我正在使用在 ~/.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 envvars 的“www-data”圖像: 在此處輸入圖像描述

Apache2 使用“www-data”用戶運行 PHP。正如用戶 mao 指出的那樣,“www-data”必須在所有意義上都具有對 DB2 CLIDRIVER 的完全訪問權限。

我發現我必須在 etc/enviroment 文件中放置與 ~/.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,“db2inst1”是數據服務器上的用戶(在本例中是虛擬機)

然后我繼續使用:

$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。希望這對某人有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM