php pdo_ibm调用存储过程返回null

时间:2017-09-01 08:07:25

标签: php stored-procedures pdo db2

大家好! 我有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>的

0 个答案:

没有答案