日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

PHP升級到4.3版本之后改變了調(diào)用存儲過程的一個

系統(tǒng) 3259 0

編寫者

版本

本文假定您熟悉 Php 、Sql

鄭昀 @ 掌上靈通

第一稿


小麻煩:

我們按照慣例使用了一個MS Sql Server的存儲過程procA,它給出了一個輸出參數(shù)nReturn,
而且返回了一個結(jié)果集。
在如何讓PHP調(diào)用這個procA的時候,我們遭遇了一點小麻煩。

魚肉和熊掌不可兼得:
我們本來希望這樣的代碼能夠既得到輸出參數(shù),又得到返回的結(jié)果集:
// 初始化要傳進存儲過程的參數(shù)們:
$nYear = 2004;
$nPageSize = 20;
$nPageNo = 1;
// Initializes a stored procedure:
$stmt = mssql_init("proc_stat_page", $db_mssql->Link_ID);
// 綁定輸入?yún)?shù):
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);
// 執(zhí)行存儲過程,得到QueryID:
$db_mssql->Query_ID = mssql_execute($stmt,false);
雖然得到了結(jié)果集,但是,這樣$nReturn參數(shù)是拿不到輸出參數(shù)的。

如果把最后一句話改為:
$db_mssql->Query_ID = mssql_execute($stmt,true);
輸出參數(shù)倒是拿到了,結(jié)果集又沒有了。

好像是一個魚肉和熊掌不可兼得的樣子。
難道PHP連這個都做不到?PHP手冊中也沒有講這個問題。

來自于PHP維護者的解釋:
原本我們這種調(diào)用辦法是PHP 4.3版本之前肯定是支持的。
“但是,自從PHP 4.3版本之后,”他們說,“為了能夠兼容存儲過程返回多個結(jié)果集,PHP改變這個特性。”
“如果你不需要結(jié)果集,你應該設(shè)置mssql_execute的第二個可選參數(shù)為TRUE,這樣mssql_execute方法之后你就可以得到輸出參數(shù)了。”
“如果你需要返回的結(jié)果集們,你應該為每一個結(jié)果集調(diào)用一次mssql_next_result。在最后一個結(jié)果集返回之后,你再調(diào)用mssql_next_result就會得到返回值FALSE,這時候,你就可以訪問輸出參數(shù)了。”

解決:
在最后我們補上一句話:
// 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填充了正確的輸出參數(shù)到$nRetVal里。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=140231


PHP升級到4.3版本之后改變了調(diào)用存儲過程的一個特性


更多文章、技術(shù)交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 尼勒克县| 郎溪县| 济宁市| 周至县| 民权县| 泽州县| 林芝县| 山东省| 孙吴县| 施秉县| 乌兰察布市| 金山区| 启东市| 壤塘县| 恩平市| 喜德县| 新营市| 镇原县| 青浦区| 东港市| 阿巴嘎旗| 延川县| 个旧市| 丹棱县| 广平县| 吉隆县| 大丰市| 竹溪县| 神池县| 银川市| 永吉县| 长乐市| 双城市| 响水县| 溧阳市| 永清县| 潜江市| 隆化县| 武城县| 兴化市| 岳西县|