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 相关文章推荐
用mysql触发器自动更新memcache的实现代码
Oct 11 PHP
php array的学习笔记
May 16 PHP
探讨:parse url解析URL,返回其组成部分
Jun 14 PHP
PHP生成不同颜色、不同大小的tag标签函数
Sep 23 PHP
Drupal读取Excel并导入数据库实例
Mar 02 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
Dec 19 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 PHP
php面向对象编程self和static的区别
May 08 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
Oct 21 PHP
php计算多个集合的笛卡尔积实例详解
Feb 16 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
PHP一致性hash分布式算法封装类定义与用法示例
Aug 04 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中路径问题的解决方案
2006/10/09 PHP
10条PHP高级技巧[修正版]
2011/08/02 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
phpinfo的知识点总结
2019/10/10 PHP
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
javascript数组的使用
2013/03/28 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
详解Python中内置的NotImplemented类型的用法
2015/03/31 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
python 如何设置守护进程
2020/10/29 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
毕业生求职简历的自我评价
2013/10/23 职场文书
学习雷锋主题班会
2015/08/14 职场文书
Oracle 区块链表创建过程详解
2021/05/15 Oracle
Python import模块的缓存问题解决方案
2021/06/02 Python
Java使用Unsafe类的示例详解
2021/09/25 Java/Android