您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/3/5 20:18:26发布25次查看
$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);
谢谢思路
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product