php執行多個預存程序的方法【基於thinkPHP】_php執行個體

來源:互聯網
上載者:User

本文執行個體講述了php執行多個預存程序的方法。分享給大家供大家參考,具體如下:

從以前的使用原生代碼來看,只需要將結果集關閉即可,即

$this -> queryID -> close();

使用mysqli方式,修改DbMysqli.class.php,將query函數改為:

public function query($str) {    $this -> initConnect(false);    if (!$this -> _linkID) {      return false;    }    $this -> queryStr = $str;    //釋放前次的查詢結果    if ($this -> queryID)      $this -> free();    N('db_query', 1);    // 記錄開始執行時間    G('queryStartTime');    $this -> queryID = $this -> _linkID -> query($str);    // 對預存程序改進    $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();    }    //主要將這段移動了一下,關閉結果集    if ($this -> _linkID -> more_results()) {      while (($res = $this -> _linkID -> next_result()) != NULL) {        $this -> queryID -> close();      }    }    return $ret ;}

下面就可以調用多個預存程序,或許執行其他SQL操作,可以直接使用M函數

在使用thinkphp的時候發現執行多個預存程序只能執行第一個,看了一下源碼Driver/Db/DbMysql.class,已經對預存程序進行了一定處理,但是不知道為什麼運行不了。

用原生代碼解決了問題(下面是部分代碼):

$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 "資料庫連接用時:" . (($t2 - $t1)) . "s <br />";$arr = array();// 1st Query$procedure = "call p1()";$result = $db->query($procedure);if ($result) {// Cycle through resultswhile ($row = $result->fetch_object()) {//添加到對象數組$arr[] = $row;}// 這裡是最重要的,需要將遊標移動下一個結果集$result->close();$db->next_result();}$procedure = "call p2()";$result = $db->query($procedure);if ($result) {// Cycle through resultswhile ($row = $result->fetch_object()) {//添加到對象數組$arr[] = $row;}// 這裡是最重要的,需要將遊標移動下一個結果集$result->close();$db->next_result();}

更多關於thinkPHP相關內容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結》、《ThinkPHP常用方法總結》、《smarty模板入門基礎教程》及《PHP模板技術總結》。

希望本文所述對大家基於ThinkPHP架構的PHP程式設計有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.