php執(zhí)行多個(gè)存儲(chǔ)過程的方法【基于thinkPHP】
本文實(shí)例講述了php執(zhí)行多個(gè)存儲(chǔ)過程的方法。分享給大家供大家參考,具體如下:
從以前的使用原生代碼來看,只需要將結(jié)果集關(guān)閉即可,即
$this -> queryID -> close();
使用mysqli方式,修改DbMysqli.class.php,將query函數(shù)改為:
public function query($str) { $this -> initConnect(false); if (!$this -> _linkID) { return false; } $this -> queryStr = $str; //釋放前次的查詢結(jié)果 if ($this -> queryID) $this -> free(); N('db_query', 1); // 記錄開始執(zhí)行時(shí)間 G('queryStartTime'); $this -> queryID = $this -> _linkID -> query($str); // 對存儲(chǔ)過程改進(jìn) $ret = array(); $this -> debug(); if (false === $this -> queryID) { $this -> error(); return false; } else { $this -> numRows = $this -> queryID -> num_rows; $this -> numCols = $this -> queryID -> field_count; $ret = $this -> getAll(); } //主要將這段移動(dòng)了一下,關(guān)閉結(jié)果集 if ($this -> _linkID -> more_results()) { while (($res = $this -> _linkID -> next_result()) != NULL) { $this -> queryID -> close(); } } return $ret ; }
下面就可以調(diào)用多個(gè)存儲(chǔ)過程,或許執(zhí)行其他SQL操作,可以直接使用M函數(shù)
在使用thinkphp的時(shí)候發(fā)現(xiàn)執(zhí)行多個(gè)存儲(chǔ)過程只能執(zhí)行第一個(gè),看了一下源碼Driver/Db/DbMysql.class,已經(jīng)對存儲(chǔ)過程進(jìn)行了一定處理,但是不知道為什么運(yùn)行不了。
用原生代碼解決了問題(下面是部分代碼):
$db = new mysqli(C("DB_HOST"), C("DB_USER"), C("DB_PWD"), C("DB_NAME")); if (mysqli_connect_errno()) throw_exception(mysqli_connect_error()); $t2 = microtime(true); echo "數(shù)據(jù)庫連接用時(shí):" . (($t2 - $t1)) . "s <br />"; $arr = array(); // 1st Query $procedure = "call p1()"; $result = $db->query($procedure); if ($result) { // Cycle through results while ($row = $result->fetch_object()) { //添加到對象數(shù)組 $arr[] = $row; } // 這里是最重要的,需要將游標(biāo)移動(dòng)下一個(gè)結(jié)果集 $result->close(); $db->next_result(); } $procedure = "call p2()"; $result = $db->query($procedure); if ($result) { // Cycle through results while ($row = $result->fetch_object()) { //添加到對象數(shù)組 $arr[] = $row; } // 這里是最重要的,需要將游標(biāo)移動(dòng)下一個(gè)結(jié)果集 $result->close(); $db->next_result(); }
更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《smarty模板入門基礎(chǔ)教程》及《PHP模板技術(shù)總結(jié)》。
希望本文所述對大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。
- thinkPHP框架中執(zhí)行原生SQL語句的方法
- ThinkPHP框架獲取最后一次執(zhí)行SQL語句及變量調(diào)試簡單操作示例
- thinkPHP框架中執(zhí)行事務(wù)的方法示例
- ThinkPHP行為擴(kuò)展Behavior應(yīng)用實(shí)例詳解
- thinkPHP3.2.2框架行為擴(kuò)展及demo示例
- 老生常談ThinkPHP中的行為擴(kuò)展和插件(推薦)
- ThinkPHP框架設(shè)計(jì)及擴(kuò)展詳解
- ThinkPHP應(yīng)用模式擴(kuò)展詳解
- ThinkPHP的Widget擴(kuò)展實(shí)例
- ThinkPHP框架實(shí)現(xiàn)定時(shí)執(zhí)行任務(wù)的兩種方法分析
相關(guān)文章
詳解PHP函數(shù) strip_tags 處理字符串缺陷bug
這篇文章主要介紹了詳解PHP函數(shù) strip_tags 處理字符串缺陷bug的相關(guān)資料,需要的朋友可以參考下2017-06-06php中使用Ajax時(shí)出現(xiàn)Error(c00ce56e)的詳細(xì)解決方案
php中使用Ajax時(shí)出現(xiàn)Error: 由于出現(xiàn)錯(cuò)誤 c00ce56e 而導(dǎo)致此項(xiàng)操作無法完成,本文討論一下各版本之間ajax兼容性造成錯(cuò)誤的解決方法2014-11-11PHP+jQuery+Ajax實(shí)現(xiàn)用戶登錄與退出
本文使用Ajax無刷新登錄和退出,從而提升了用戶體驗(yàn)。 若用戶為登錄狀態(tài),則顯示用戶相關(guān)登錄信息,否則顯示登錄表單。2015-04-04Swoole?webSocket客服IM消息系統(tǒng)方案解析
這篇文章主要為大家介紹了Swoole?webSocket客服IM消息系統(tǒng)方案解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03