并在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 ; 

解决方案 »

  1.   


    我是想获得多个结果集啊,PHP支持多个SELECT的。
      

  2.   

    哦,要获得多个结果集,没用过PDO,你确定PDO能办到吗?好像mysqli可以
      

  3.   

    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";
    }
      

  4.   

    是啊,现在项目只能用PDO,搞了半天还没试过多结果集问题...
      

  5.   

    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();
        }