大家好! 我有ibm db2数据库的远程z / Os服务器,以及 php 7.1.8 和 apache 2.4 的 centOs 7.3 服务器。
从db2中的系统表中选择给了我信息,但是当我调用存储过程时 - 它们只返回 NULL,NULL ,但是在规范中写入它必须返回 INT - errord代码和 VARCHAR(800) - 错误说明。
如果我从我的Windows db2客户端调用存储过程 - 我得到 0,0 并需要信息。
$sql = 'CALL procedures.name(1,1,'text',1,1,'2017-08-30','2017-08-31',?,?)';
try {
$con = new PDO("idb:all_the_connections_stuu",'user','pass',
[
PDO::ATTR_PERSISTENT => FALSE,
PDO::ATTR_ERRMODE => PDO:ERRMODE_EXCEPTION,
PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL,
PDO::ATTR_AUTOCOMMIT => 0
]
);
$stmt = $con->prepare($sql);
$stmt->bindParam(1, $errorNumber, PDO::PARAM_INT); //also trying without PDO::params
$stmt->bindParam(2, $errorCode, PDO::PARAM_STR, 800); //and with |PDO::PARAM_INPUT_OUTPUT
$stmt->execute(); //return *TRUE*
var_dump($errorNumber); //return NULL
var_dump($errorCode); //return NULL
var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); //returns Error
$stmt->closeCursor();
$stmt = null;
} catch (PDOException $e) {
echo ($e->getMessage());
}
我无权更改或查看商店程序代码,只能执行。
当从PHP程序调用时似乎正在运行 - (当我设置输入参数不是1天,而是年份 - 它在返回 NULL,NULL 之前的分钟内工作)。
其中一些程序必须创建临时表,但它们都是空的。
也许PHP关闭游标并松散所有数据?或者PHP PDO自动提交可能有问题?只是猜测
__ UPD: 忘了连接和语句错误,它没有。
$con->errorInfo();
$stmt->errorInfo();
输出:
Array
(
[0] => 00000
[1] => NULL
[2] => NULL
)
Array
(
[0] => 00000
[1] => 0
[2] => ((null)[0] at (null):0)
)
___ UPD2:
只是忘了添加$stmt->fetchAll(PDO::FETCH_ASSOC)
Fatal error: Uncaught PDOException: SQLSTATE[57017]: <<Unknown error>>: -332
[IBM][CLI Driver][DB2] SQL0332N
Character conversion from the source code page "" to the target code page "" is not supported.
SQLSTATE=57017
(SQLFetchScroll[-332] at /home/user/shared/PDO_IBM-1.3.4/ibm_statement.c:1306) in /var/www/html/server/testsIBM/index.php:80
Stack trace:
#0 /var/www/html/server/testsIBM/index.php(80): PDOStatement->fetchAll(7, 0)
#1 {main}
thrown in /var/www/html/server/testsIBM/index.php on line 80
好的,我可能需要针对此错误提出新问题,但似乎我的CentOs lang locale(因为我不在CentOs上安装db2客户端)与DB2 Server DB2CODEPAGE <不匹配/ em>的