`
阿尔萨斯
  • 浏览: 4172966 次
社区版块
存档分类
最新评论

PHP升级到4.3版本之后改变了调用存储过程的一个特性

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

编写者<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

版本

本文假定您熟悉 Php、Sql

郑昀@掌上灵通

第一稿


小麻烦:

我们按照惯例使用了一个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 Web开发第4版pdf以及源码

    1.2 创建一个示例应用:Bob汽车零部件商店 1.2.1 创建订单表单 1.2.2 表单处理 1.3 在HTML中嵌入PHP 1.3.1 使用PHP标记 1.3.2 PHP语句 1.3.3 空格 1.3.4 注释 1.4 添加动态内容 1.4.1 调用函数 1.4.2 使用...

    PHP和MySQL WEB开发(第4版)

    1.2 创建一个示例应用:Bob汽车零部件商店 1.2.1 创建订单表单 1.2.2 表单处理 1.3 在HTML中嵌入PHP 1.3.1 使用PHP标记 1.3.2 PHP语句 1.3.3 空格 1.3.4 注释 1.4 添加动态内容 1.4.1 调用函数 1.4.2 使用date()函数...

    php网络开发完全手册

    16.5.1 PHP调用存储过程 277 16.5.2 PHP调用触发器 277 16.6 小结 279 第17章 Session与Cookie 280 17.1 Session与Cookie简介 280 17.2 PHP中Session的实现 280 17.2.1 开始使用Session 280 17.2.2 Session预定义...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    可能你已经注意到,变量都有一个美元符号($)的前缀。所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。 $g_var = 1 ; /...

    PHP和MySQL Web开发第4版

    1.2 创建一个示例应用:Bob汽车零部件商店 1.2.1 创建订单表单 1.2.2 表单处理 1.3 在HTML中嵌入PHP 1.3.1 使用PHP标记 1.3.2 PHP语句 1.3.3 空格 1.3.4 注释 1.4 添加动态内容 1.4.1 调用函数 1.4.2 使用...

    PHP程序开发范例宝典III

    实例047 同一个页面中的多表单提交 66 实例048 获取表单中提交的所有数据 68 实例049 以文件域的形式显示数据信息 70 第3章 CSS与JavaScript脚本的应用 73 3.1 文字特效 74 实例050 逐个闪烁的文字 74 ...

    Adminers v1.1.6.zip

    支持PHP4.3 ,MySQL 4.1 以上的版本。 Adminers源于Adminersourcecode二次开发而来。本程序非官方发布版本,二次开发改动的位置许多,基本上修复了官方所有的bug,兼容php 5.4 ,html也更规范化。同时放弃引用官方...

    PHP3程序设计

    15.1 问题:一个用户能覆盖另一 个用户的更改 228 15.1.1 创建并发数据库 228 15.1.2 程序及图解 228 15.2 解决方案:阻止多用户编辑 235 15.2.1 跟踪编辑会话 236 15.2.2 设计解决方案 236 15.3 总结 248 第16章 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例128 获取数组中最后一个元素 158 实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例128 获取数组中最后一个元素 158 实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 ...

    MYSQL

    4.16.1 从一个 3.22 版本升级到 3.23 4.16.2 从一个 3.21 版本升级到 3.22 4.16.3 从一个 3.20 版本升级到 3.21 4.16.4 升级到其他的体系结构 5 MySQL 与标准的兼容性? 5.1 MySQL对ANSI ...

    MySQL中文参考手册

    + 4.16.3 从一个 3.20 版本升级到 3.21 + 4.16.4 升级到其他的体系结构 * 5 MySQL 与标准的兼容性? o 5.1 MySQL对ANSI SQL92 的扩充 o 5.2 以ANSI模式运行 MySQL o 5.3 MySQL相比ANSI SQL92的差别 o 5.4 ...

    MySQL中文参考手册.chm

    4.16.1 从一个 3.22 版本升级到 3.23 4.16.2 从一个 3.21 版本升级到 3.22 4.16.3 从一个 3.20 版本升级到 3.21 4.16.4 升级到其他的体系结构 5 MySQL 与标准的兼容性? 5.1 MySQL对...

    MySQL 5.1中文手冊

    在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...

    MYSQL中文手册

    在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用...

    精通sql结构化查询语句

    以SQL Server为工具,讲解SQL语言的应用,提供了近500个曲型应用,读者可以随查随用,深入讲解SQL语言的各种查询语句,详细介绍数据库设计及管理,详细讲解存储过程、解发器和游标等知识,讲解了SQL语言在高级语言中...

    MySQL5.1参考手册官方简体中文版

    在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...

Global site tag (gtag.js) - Google Analytics