黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

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

系統(tǒng) 3452 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é)果集,你應(yīng)該設(shè)置mssql_execute的第二個可選參數(shù)為TRUE,這樣mssql_execute方法之后你就可以得到輸出參數(shù)了。”
“如果你需要返回的結(jié)果集們,你應(yīng)該為每一個結(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ù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論