PHP_PDO 调用存储过程,返回参数问题

auspi12341 2013-12-06 11:55:28
$stmt = $db->prepare("CALL pro_test(?,@?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $return_value, PDO::PARAM_STR, 4000);


// 插入一行
$name = '成都市';
$stmt->execute ();

print_r($return_value);


调用存储过程,返回参数怎么是空的,么有,查看数据库,已经成功添加了数据,
直接在数据库中执行
SET @n = -1;
CALL pro_test("啊是打算",@n);
select @n;
返回的都是正确的参数
...全文
340 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gavin3110 2015-08-31
  • 打赏
  • 举报
回复
即将学习PHP希望能在人生的仕途中能与你们有交集!
我是一个爱学习的孩子!没什么脾气!很好相处!
我的微信号:Mr_pohai
网名:破孩先生
xuzuning 2013-12-06
  • 打赏
  • 举报
回复
调用存储过程时,数据库可能返回多个结果集 依次是:基本的 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());
auspi12341 2013-12-06
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
你在数据库管理器中都要
SET @n = -1;
CALL pro_test("啊是打算",@n);
select @n;
执行3条指令 那么在 php 中就怎么简化成 1 条了呢
想通了
$stmt = $db->prepare("CALL pro_test(?,@sp_result);");
		$stmt->bindParam(1, $name);;
		$stmt->execute ();
		$outputArray = $db->query("select @sp_result")->fetch(PDO::FETCH_ASSOC);
谢谢思路
auspi12341 2013-12-06
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
你在数据库管理器中都要
SET @n = -1;
CALL pro_test("啊是打算",@n);
select @n;
执行3条指令 那么在 php 中就怎么简化成 1 条了呢
那么在PHP中应该怎么写?查了很多资料,PHP.net 中的demo都是错的· 头都打了
xuzuning 2013-12-06
  • 打赏
  • 举报
回复
你在数据库管理器中都要
SET @n = -1;
CALL pro_test("啊是打算",@n);
select @n;
执行3条指令 那么在 php 中就怎么简化成 1 条了呢
auspi12341 2013-12-06
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
调用存储过程时,数据库可能返回多个结果集 依次是:基本的 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());
按照你说的,在sql前加上 select, 执行后查看数据库没有任何执行结果,不加之前都能成功添加数据,并且没有报错。 去掉select,能添加数据,但是 print_r($stmt->fetchAll(PDO::FETCH_NUM)); 返回的结果是Array ( ) ,不怎么懂,希望能讲解

21,886

社区成员

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

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