使用PDO获取多个结果集似乎有问题!?nextRowset() fetchAll()

subnet 2008-04-16 02:58:37
我完全是按照手册上写的一个示例:

test数据库上建一tb_test表
--
-- 表的结构 `tb_test`
--
CREATE TABLE IF NOT EXISTS `tb_test` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(20) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;
--
-- 导出表中的数据 `tb_test`
--
INSERT INTO `tb_test` (`id`, `name`) VALUES
(1, 'zhangsan'),
(2, 'lisi'),
(3, 'wangwu'),
(4, 'zhaoliu');


并在test库上建一个sp_test()存储过程
DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`sp_test` $$
CREATE PROCEDURE `test`.`sp_test` ()
BEGIN
SELECT * FROM tb_test LIMIT 1;
SELECT * FROM tb_test LIMIT 2;
END $$
DELIMITER ;

PHP代码 test.php(完全照抄PHP手册上的)
<?php
$conn = new PDO('mysql:host=localhost;dbname=test', 'root', '123456');
$sql = 'CALL sp_test()';
$stmt = $conn->query($sql);
$i = 1;
do {
$rowset = $stmt->fetchAll(PDO::FETCH_NUM);
if ($rowset) {
printResultSet($rowset, $i);
}
$i++;
} while ($stmt->nextRowset());

[color=sienna][color=navy]function printResultSet(&$rowset, $i) {
print "Result set $i:\n";
foreach ($rowset as $row) {
foreach ($row as $col) {
print $col . "\t";
}
print "\n";
}
print "\n";
}
?>





PHP的返回的结果是:
Result set 1: 1 zhangsan

也就是只有一个结果集,在mysql命令行下执行sp_test();
结果是
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan | (PHP那段代码只返回了这个结果集)
+----+----------+
1 row in set (0.00 sec)
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan | (没有返回这段结果集)
| 2 | lisi |
+----+----------+
2 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)



我网上找了很多文章,写法也都是大同小异,换来换去始终也只能返回第一个结果集,请问大家有做过这块的吗?请帮我看下哪里出了问题。谢谢。
...全文
320 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
这个简单啊,网上搜一下就得到答案了.
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
什么呀
meiZiNick 2008-04-30
  • 打赏
  • 举报
回复
不会,帮顶
mengyaoren 2008-04-26
  • 打赏
  • 举报
回复
public function myselectall($sql,$fetchBy='',$transaction=false){
$this->pdo->setAttribute(PDO::ATTR_CASE,PDO::CASE_NATURAL);
if ($transaction===true){
$this->pdo->beginTransaction();
if ($this->pdo->query($sql)===false){
$this->pdo->roolback();
}
else {
$this->pdo->commit();
}
}
else {
$this->result = $this->pdo->query($sql);
}

switch ($fetchBy){
case 'id':
$this->result->setFetchMode(PDO::FETCH_NUM);
break;
case 'num':
$this->result->setFetchMode(PDO::FETCH_ASSOC);
break;
case 'both':
$this->result->setFetchMode(PDO::FETCH_BOTH);
break;
case 'obj':
$this->result->setFetchMode(PDO::FETCH_OBJ);
break;
default:
$this->result->setFetchMode(PDO::FETCH_BOTH);
break;
}
return $this->result->fetchAll();
}
subnet 2008-04-25
  • 打赏
  • 举报
回复
subnet 2008-04-16
  • 打赏
  • 举报
回复
是啊,现在项目只能用PDO,搞了半天还没试过多结果集问题...
ClintNorthwood 2008-04-16
  • 打赏
  • 举报
回复
mysqli可以办到:

$mysqli = new mysqli("localhost", "root", "root", "test");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "call sp_test();";
$mysqli->multi_query($query);
$i = 1;
while($mysqli->more_results()){
if ($result = $mysqli->store_result()) {
while ($rowset = $result->fetch_row()) {
//printf("%s\n", $row[0]);
printResultSet($rowset, $i);
}
$result->close();
}
$i++;
$mysqli->next_result();
}
function printResultSet(&$rowset, $i) {
print "Result set $i:\n";
foreach ($rowset as $row) {
print $row . "\t";
}
print "\n";
}
ClintNorthwood 2008-04-16
  • 打赏
  • 举报
回复
哦,要获得多个结果集,没用过PDO,你确定PDO能办到吗?好像mysqli可以
subnet 2008-04-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yangyu112654374 的回复:]
.....
你的存储过程有问题,改成这样:

DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`sp_test` $$
CREATE PROCEDURE `test`.`sp_test` ()
BEGIN

[/Quote]

我是想获得多个结果集啊,PHP支持多个SELECT的。
ClintNorthwood 2008-04-16
  • 打赏
  • 举报
回复
并在test库上建一个sp_test()存储过程
DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`sp_test` $$
CREATE PROCEDURE `test`.`sp_test` ()
BEGIN
SELECT * FROM tb_test LIMIT 1;
SELECT * FROM tb_test LIMIT 2;
END $$
DELIMITER ;

你的存储过程有问题,改成这样:

DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`sp_test` $$
CREATE PROCEDURE `test`.`sp_test` ()
BEGIN
SELECT * FROM tb_test;
END $$
DELIMITER ;

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧