none
php使用微软的pdo驱动链接sqlserver2008,执行存储过程的返回值不能超过4000个字符的问题 RRS feed

  • 问题

  • 程序的例子如下:

    -------------------------------------
    function exeuProcEntry($versionno, $ip, $xml, &$resxml) {
            try {
                $sql = "exec [pbc].[ProcEntry] ?,?,?,?";
                $stmt = $this->dbh->prepare ( $sql );
                $stmt->bindParam ( 1, $versionno, PDO::PARAM_STR );
                $stmt->bindParam ( 2, $ip, PDO::PARAM_STR );
                $stmt->bindParam ( 3, $xml, PDO::PARAM_STR );
                $stmt->bindParam ( 4, $resxml, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 4000 );
                if ($stmt->execute ()) {
                    return true;
                } else {
                    $arr = $stmt->errorinfo ();
                    $error = iconv ( "GBK", "UTF-8", $arr [2] );
                    $resxml = "<response rescode=\"-99\" resmsg=\"error\"></response>";
                    return true;
                }
            } catch ( PDOException $e ) {
                $resxml = "<response rescode=\"-99\" resmsg=\"error\"></response>";
                return false;
            }
        }

    如果PARAM_INPUT_OUTPUT, 4000这里的4000改为更大的数值的话,就会报错。如果设为4000,而输出的值超过4000的话就会截断!

    另外,如果我使用的存储过程既有输出参数,同时存储过程里还有select语句返回的结果集。那么最终我获得的输出只有结果集,无法获得输出参数!这个问题怎么解决?

    2012年6月6日 6:01

答案

全部回复