1

我正在使用 Zend 框架 2.2 和 tablegateway 库在 PDO-mysql 中使用存储过程。

存储过程的一般示例

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_proc`(IN id SMALLINT)
BEGIN
     SELECT * FROM TABLE_A WHERE ID_TABLE=ID;
     SELECT * FROM TABLE_B WHERE ID_FK=ID;
END

这是模型的功能

public function __construct(Adapter $adapter = null, $databaseSchema = null, ResultSet $selectResultPrototype = null)
    {
        return parent::__construct('', $adapter, $databaseSchema, 
            $selectResultPrototype);
    }

public function listaServicio()
   {
    $dbAdapter=$this->getAdapter();
        $stmt = $dbAdapter->createStatement(); 
        $stmt->prepare('CALL sp_proc(:id)'); 
        $id=15;
        $stmt->getResource()->bindParam(':id', $id, \PDO::PARAM_INT); 
        $resultado=$stmt->execute();
        while ($resultado->next()) {
          var_dump($resultado->current());
        }
    }

我只有“第一个”选择(table_a)的结果,但无法从“第二个”(table_b)获得结果。我错过了什么?

4

1 回答 1

2

我回答自己,也许这对某人有用。

public function listaServicio()
{
$stmt = $dbAdapter->createStatement(); 
$stmt->prepare('CALL sp_proc(:id)'); 
$id=15;
$stmt->getResource()->bindParam(':id', $id, \PDO::PARAM_INT); 
$resultado=$stmt->execute();
$result1=$stmt->getResource()->fetchAll(\PDO::FETCH_OBJ);
var_dump($result1);
$stmt->getResource()->nextRowset();
$result2=$stmt->getResource()->fetchAll(\PDO::FETCH_OBJ);
var_dump($result2);
$stmt->getResource()->closeCursor();
}
于 2013-08-18T19:13:00.103 回答