<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## Mix\Database\Database::class 基于 PDO 封裝的數據庫組件,內置連接池,可獨立使用。 ## 組件 使用 [composer]([https://www.phpcomposer.com/](https://www.phpcomposer.com/)) 安裝: ~~~ composer require mix/database ~~~ ## 依賴注入配置 - [manifest/beans/database.php](https://github.com/mix-php/mix-skeleton/blob/master/manifest/beans/database.php) > \>= v2.2.9 新增了 maxLifetime、waitTimeout 參數 ## 長連接超時問題 MySQL 配置文件內的 `interactive_timeout` 與 `wait_timeout` 參數,決定了 sleep 多長時間的連接會被主動 kill,正常情況下是需要用戶自己來處理連接超時的問題,但使用該組件時用戶不需要處理,組件底層已經幫你處理了。 - `maxLifetime` 連接因閑置被 mysql 主動 kill 連接時,連接會被重連,業務不受影響,但調度器依然還是會調度一個異常,如果想消除這個異常,配置該參數 < `interactive_timeout` 與 `wait_timeout` 參數。 ## 獲取連接 - 直接調用方法獲取連接 >[danger] 注意:$conn 必須立即置空歸還 ``` /** @var \Mix\Database\Database $db */ $db = context()->get('database'); // 調用方法返回連接,然后執行 $conn = $db->prepare("SELECT * FROM `post`"); $result = $conn->queryAll(); $affectedRows = $conn->getRowCount(); $conn = null; // 使用完后立即手動歸還連接,避免出現協程死鎖 // 不需要獲取 getRowCount、getLastInsertId 時,直接調用 $result = $db->prepare("SELECT * FROM `post`")->queryAll(); ``` - 手動獲取連接 >[danger] 注意:每次 borrow 取出后用完必須立即置空歸還,并且在這個連接的使用過程中不可再次獲取其他連接 ``` /** @var \Mix\Database\Database $db */ $db = context()->get('database'); $conn = $db->borrow(); // ... $conn = null; // 使用完后立即手動歸還連接,避免出現協程死鎖 ``` 當出現以下異常信息,很有可能就是協程死鎖導致 ~~~ PHP Fatal error: Swoole\Coroutine\Channel::close(): you must call Channel constructor first in /Users/***/worker-pool/src/AbstractWorker.php on line 96 Fatal error: Swoole\Coroutine\Channel::close(): you must call Channel constructor first in /Users/***/worker-pool/src/AbstractWorker.php on line 96 [2020-10-26 19:48:59 @61837.0] WARNING ~Channel (ERRNO 10003): channel is destroyed, 1 consumers will be discarded [2020-10-26 19:48:59 @61837.0] WARNING ~Channel (ERRNO 10003): channel is destroyed, 20 consumers will be discarded [2020-10-26 19:48:59 @61837.0] WARNING ~Channel (ERRNO 10003): channel is destroyed, 1 consumers will be discarded [2020-10-26 19:48:59 @61837.0] WARNING ~Channel (ERRNO 10003): channel is destroyed, 1 consumers will be discarded ~~~ - 獲取查詢構造器 ``` /** @var \Mix\Database\Database $db */ $db = context()->get('database'); $builder = $db->table('user'); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看