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 相关文章推荐
模拟OICQ的实现思路和核心程序(一)
Oct 09 PHP
php代码把全角数字转为半角数字
Dec 10 PHP
php 抽象类的简单应用
Sep 06 PHP
php中一个完整表单处理实现代码
Nov 10 PHP
PHP面向对象之旅:深入理解static变量与方法
Jan 06 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
May 04 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
Nov 14 PHP
PHP使用curl函数发送Post请求的注意事项
Nov 26 PHP
thinkPHP5.0框架独立配置与动态配置方法
Mar 17 PHP
PHP常用函数之获取汉字首字母功能示例
Oct 21 PHP
swoole锁的机制代码实例讲解
Mar 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 实用代码收集
2010/01/22 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
PHP单例模式详细介绍
2015/07/01 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
JavaScript中的原型prototype属性使用详解
2015/06/05 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
[02:09]EHOME夺得首届辉夜杯冠军—现场颁奖仪式
2015/12/28 DOTA
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
Python中str.join()简单用法示例
2018/03/20 Python
浅谈Pandas中map, applymap and apply的区别
2018/04/10 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
python 解决selenium 中的 .clear()方法失效问题
2020/09/01 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
利用CSS3的checked伪类实现OL的隐藏显示的方法
2010/12/18 HTML / CSS
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
美国休闲服装品牌:Express
2016/09/24 全球购物
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
大学生年度自我鉴定
2013/10/31 职场文书
文案策划求职信
2014/03/18 职场文书
销售主管竞聘书
2014/03/31 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL