PHP得到mssql的存储过程的输出参数功能实现


Posted in PHP onNovember 23, 2012

在开发过程中可能会遇到无法取得MSSQL存储过程的输出参数,很多朋友都不知道该怎么办,本文将详细介绍PHP得到mssql的存储过程的输出参数功能实现,需要了解的朋友可以参考下

<? 
$conn=mssql_connect("127.0.0.1","user","passwd"); 
mssql_select_db("mydb"); 
$stmt=mssql_init("pr_name",$conn);// 
$a=50001; 
mssql_bind($stmt,"RETVAL",$val,SQLVARCHAR); //用于直接返回return -103此类的值。 
mssql_bind($stmt,"@outvar",$b,SQLVARCHAR,true);//用于返回在存储过程中定义的输出参数 
mssql_bind($stmt,"@invar",$a,SQLINT4); 
$result = mssql_execute($stmt,true);//不能返回结果集,只能得到输出参数 
//$result = mssql_execute($stmt,false); //返回结果集 
//$records=mssql_fetch_array($result); 
//print_r($records); 
//mssql_next_result($result);下一个结果集,当等于FALSE的时候下一个就是输出参数 
echo $b; 
echo $val; 
?>

下面这些是从别的地方看到的。
小麻烦
我们按照惯例使用了一个MS Sql Server的存储过程procA,它给出了一个输出参数nReturn,
而且返回了一个结果集。
在如何让PHP调用这个procA的时候,我们遭遇了一点小麻烦。
鱼肉和熊掌不可兼得:
我们本来希望这样的代码能够既得到输出参数,又得到返回的结果集:
// 初始化要传进存储过程的参数们: 
$nYear = 2004; 
$nPageSize = 20; 
$nPageNo = 1; 
// Initializes a stored procedure: 
$stmt = mssql_init("proc_stat_page", $db_mssql->Link_ID); 
// 绑定输入参数: 
mssql_bind($stmt, "@nReturn", $nReturn, SQLINT4, TRUE); 
mssql_bind($stmt, "@nYear", $nYear, SQLINT4); 
mssql_bind($stmt, "@nPageSize", $nPageSize, SQLINT4); 
mssql_bind($stmt, "@nPageNo", $nPageNo, SQLINT4); 
// 执行存储过程,得到QueryID: 
$db_mssql->Query_ID = mssql_execute($stmt,false);

虽然得到了结果集,但是,这样$nReturn参数是拿不到输出参数的。
如果把最后一句话改为:
$db_mssql->Query_ID = mssql_execute($stmt,true);
输出参数倒是拿到了,结果集又没有了。
好像是一个鱼肉和熊掌不可兼得的样子。
难道PHP连这个都做不到?PHP手册中也没有讲这个问题。
来自于PHP维护者的解释:
原本我们这种调用办法是PHP 4.3版本之前肯定是支持的。
“但是,自从PHP 4.3版本之后,”他们说,“为了能够兼容存储过程返回多个结果集,PHP改变这个特性。”

“如果你不需要结果集,你应该设置mssql_execute的第二个可选参数为TRUE,这样mssql_execute方法之后你就可以得到输出参数了。”

“如果你需要返回的结果集们,你应该为每一个结果集调用一次mssql_next_result。在最后一个结果集返回之后,你再调用mssql_next_result就会得到返回值FALSE,这时候,你就可以访问输出参数了。”
解决:
在最后我们补上一句话
// After the last result has been returned the return value will have the value returned by the stored procedure.
mssql_next_result($db_mssql->Query_ID);
立刻,魔法生效了:
PHP填充了正确的输出参数到$nRetVal里。

PHP 相关文章推荐
PHP的FTP学习(一)[转自奥索]
Oct 09 PHP
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
php学习之 认清变量的作用范围
Jan 26 PHP
php xml 入门学习资料
Jan 01 PHP
php 带逗号千位符数字的处理方法
Jan 10 PHP
php生成随机数的三种方法
Sep 10 PHP
php+ajax实现无刷新分页的方法
Nov 04 PHP
php实现refresh刷新页面批量导入数据的方法
Dec 23 PHP
php结合mysql与mysqli扩展处理事务的方法
Jun 29 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
Oct 08 PHP
PHP多进程通信-消息队列使用
Mar 08 PHP
php实现文件下载更能介绍
Nov 23 #PHP
php 定义404页面的实现代码
Nov 19 #PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 #PHP
apache php模块整合操作指南
Nov 16 #PHP
php获取用户IPv4或IPv6地址的代码
Nov 15 #PHP
屏蔽机器人从你的网站搜取email地址的php代码
Nov 14 #PHP
PHP中文分词 自动获取关键词介绍
Nov 13 #PHP
You might like
php-fpm配置详解
2014/02/12 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
使用js获取QueryString的方法小结
2010/02/28 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
多个checkbox被选中时如何判断是否有自己想要的
2014/09/22 Javascript
javascript判断变量是否有值的方法
2015/04/20 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
2017/08/31 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
django开发之settings.py中变量的全局引用详解
2017/03/29 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
python Pygame的具体使用讲解
2017/11/03 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
新教师工作感言
2014/02/16 职场文书
大学生就业意向书范文
2014/04/01 职场文书
大学生赌博检讨书
2014/09/22 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
运输公司工作总结
2015/08/11 职场文书
golang 实现并发求和
2021/05/08 Golang
Python Numpy库的超详细教程
2022/04/06 Python
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers