Heim  >  Artikel  >  Backend-Entwicklung  >  PHP PDO 调用存储过程 返回多个集合 和 输出参数 如何获取?

PHP PDO 调用存储过程 返回多个集合 和 输出参数 如何获取?

WBOY
WBOYOriginal
2016-06-23 14:39:251149Durchsuche

select * from table;
select * from table1;
out $id;

如上:存储过程返回两个结果集和一个输出参数,如何在PHP中获得这两个结果集和输出参数?


回复讨论(解决方案)

一个个读取
见 PDOStatement::nextRowset 方法说明

一个个读取
见 PDOStatement::nextRowset 方法说明
如果只有多个集合我知道,但是有输出参数,如下

$stmt = $db->prepare("CALL pro_test(:name,@sp_result);");				$stmt->execute (array(':name'=>$name));		$outputArray = $db->query("select @sp_result")->fetch(PDO::FETCH_ASSOC);				print_r($outputArray["@sp_result"]);


存储过程返回一个集合,输出参数需要查询一次,但是到了这一步就出错了 
$outputArray = $db->query("select @sp_result")->fetch(PDO::FETCH_ASSOC);
Error: SOAP-ENV:Server, string: Call to a member function fetch() on a non-object

我猜应该是之前存储过程返回了个结果,再查一个就出错了,如何解决?

这是手册上的示例

$sql = 'CALL multiple_rowsets()';$stmt = $conn->query($sql);$i = 1;do {    $rowset = $stmt->fetchAll(PDO_FETCH_NUM);    if ($rowset) { //想想这里为什么要先判断一下        printResultSet($rowset, $i);    }    $i++;} while ($stmt->nextRowset());

这是手册上的示例

$sql = 'CALL multiple_rowsets()';$stmt = $conn->query($sql);$i = 1;do {    $rowset = $stmt->fetchAll(PDO_FETCH_NUM);    if ($rowset) { //想想这里为什么要先判断一下        printResultSet($rowset, $i);    }    $i++;} while ($stmt->nextRowset());

你可能理解错我的意思了,我需要存储过程的结果集和存储过程返回的参数,不过已经解决了,还是去官网看的,谢谢关注,·· 后面还有很多问题
Note for MySQL: to use input/output parameters for stored procedures with PDO use PDO.Query() statement. For example: <?php $dbh->query("CAST SomeStoredProcedure($someInParameter1, $someInParameter2, @someOutParameter)"); $dbh->query("SELECT @someOutParameter"); ?> Or, if you want very much to use PDO.Prepare(), insert "SELECT @someOutParameter" in your stored procedure and then use: <?php $stmt = $dbh->prepare("CAST SomeStoredProcedure(?, ?)"); $stmt ->execute(array($someInParameter1, $someInParameter2)); ?>

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn