调用存储过程时,数据库可能返回多个结果集
依次是:基本的 select 的结果,存储过程1的结果,存储过程2的结果 ....
你的 SQL 指令这是 CALL pro_test(?,@?) 没有 select 所以只能位于第二个结果集
如果写作 select CALL pro_test(?,@?) 就位于第一结果集了
当然环境十多变的,你也确实不能准确的知道结果集会摆在哪里
于是就需要循环读取
  do {
    $rows = $stmt->fetchAll(PDO::FETCH_NUM);
    if ($rows) {
      print_r($rows);
    }
  } while ($stmt->nextRowset());

解决方案 »

  1.   


    按照你说的,在sql前加上 select, 执行后查看数据库没有任何执行结果,不加之前都能成功添加数据,并且没有报错。
    去掉select,能添加数据,但是 print_r($stmt->fetchAll(PDO::FETCH_NUM)); 返回的结果是Array ( ) 
    ,不怎么懂,希望能讲解
      

  2.   

    你在数据库管理器中都要
    SET @n = -1;
    CALL pro_test("啊是打算",@n);
    select @n;
    执行3条指令那么在 php 中就怎么简化成 1 条了呢
      

  3.   


    那么在PHP中应该怎么写?查了很多资料,PHP.net 中的demo都是错的· 头都打了
      

  4.   


    想通了
    $stmt = $db->prepare("CALL pro_test(?,@sp_result);");
    $stmt->bindParam(1, $name);;
    $stmt->execute ();
    $outputArray = $db->query("select @sp_result")->fetch(PDO::FETCH_ASSOC);谢谢思路