今天就跟大家聊聊有關(guān)php中怎么執(zhí)行多個(gè)存儲(chǔ)過(guò)程,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
成都創(chuàng)新互聯(lián)公司來(lái)電聯(lián)系:18980820575,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)公司網(wǎng)頁(yè)制作領(lǐng)域十余年,包括發(fā)電機(jī)回收等多個(gè)領(lǐng)域擁有豐富的營(yíng)銷推廣經(jīng)驗(yàn),選擇成都創(chuàng)新互聯(lián)公司,為網(wǎng)站保駕護(hù)航!從以前的使用原生代碼來(lái)看,只需要將結(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); // 記錄開(kāi)始執(zhí)行時(shí)間 G('queryStartTime'); $this -> queryID = $this -> _linkID -> query($str); // 對(duì)存儲(chǔ)過(guò)程改進(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ǔ)過(guò)程,或許執(zhí)行其他SQL操作,可以直接使用M函數(shù)
在使用thinkphp的時(shí)候發(fā)現(xiàn)執(zhí)行多個(gè)存儲(chǔ)過(guò)程只能執(zhí)行第一個(gè),看了一下源碼Driver/Db/DbMysql.class,已經(jīng)對(duì)存儲(chǔ)過(guò)程進(jìn)行了一定處理,但是不知道為什么運(yùn)行不了。
用原生代碼解決了問(wè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ù)庫(kù)連接用時(shí):" . (($t2 - $t1)) . "s
"; $arr = array(); // 1st Query $procedure = "call p1()"; $result = $db->query($procedure); if ($result) { // Cycle through results while ($row = $result->fetch_object()) { //添加到對(duì)象數(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()) { //添加到對(duì)象數(shù)組 $arr[] = $row; } // 這里是最重要的,需要將游標(biāo)移動(dòng)下一個(gè)結(jié)果集 $result->close(); $db->next_result(); }
看完上述內(nèi)容,你們對(duì)php中怎么執(zhí)行多個(gè)存儲(chǔ)過(guò)程有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。