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

本文探讨了PHP中如何正确调用存储过程,当返回参数为空的问题,以及如何处理多结果集。通过实例说明了在SQL语句中加入SELECT的重要性,并提供了使用bindParam和nextRowset()来处理多结果集的方法。

$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;

返回的都是正确的参数

回复讨论(解决方案)

调用存储过程时,数据库可能返回多个结果集

依次是:基本的 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());

调用存储过程时,数据库可能返回多个结果集

依次是:基本的 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 ( )

,不怎么懂,希望能讲解

你在数据库管理器中都要SET @n = -1;CALL pro_test("啊是打算",@n);select @n;

执行3条指令

那么在 php 中就怎么简化成 1 条了呢

你在数据库管理器中都要SET @n = -1;CALL pro_test("啊是打算",@n);select @n;

执行3条指令

那么在 php 中就怎么简化成 1 条了呢

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

你在数据库管理器中都要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);

谢谢思路

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值