PHP_PDO 调用存储过程,返回参数问题
程序员文章站
2022-05-31 20:24:29
...
$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);
谢谢思路
上一篇: C# 泛型集合实例应用浅析
推荐阅读
-
ASP调用带参数存储过程的几种方式
-
Asp .net 调用带参数的存储过程
-
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
-
DatabaseFactory操作存储过程的两种返回参数
-
Sql Server 存储过程调用存储过程接收输出参数返回值
-
在SQL Server数据库中执行存储过程很快,在c#中调用很慢的问题
-
java调用oralc存储过程返回数组
-
java调用oralc存储过程返回数组
-
sqlserver存储过程里传字段、传字符串,并返回DataTable、字符串,存储过程调用存储过程。
-
EF中调用存储过程,通过临时表返回一个结果集,不能返回的问题