<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## `PDO` 組件 PDO 組件用于 MySQL 等關系型數據庫的操作,語法簡單明了,且具有獨特的查詢構造方式,可構造任何復雜的SQL。 >[success] 該組件基于 pdo 擴展,[語句預處理](http://php.net/manual/zh/pdo.prepared-statements.php) 將幫助你免于SQL注入攻擊。 | 類 | 調用 | 連接方式 | | --- | --- | --- | | mix\client\PDO | app()->pdo | 短連接 | | 門面類 (通常在 HTTP 開發中使用) | 調用 | | --- | --- | | mix\facades\PDO | PDO:: | | 通過配置實例化調用 (通常在命令行開發使用) | | --- | | $pdo = mix\client\PDO::newInstanceByConfig('libraries.[***]'); | ## 組件配置 App配置文件中,該組件的默認配置如下: [>> 到 GitHub 查看默認配置 <<](https://github.com/mix-php/mix/blob/v1/apps/httpd/config/http_permanent.php#L169) ## 插入 ~~~ $data = [ 'name' => 'xiaoliu', 'content' => 'hahahaha', ]; $success = PDO::insert('post', $data)->execute(); // 獲得剛插入數據的id $insertId = PDO::getLastInsertId(); ~~~ ## 批量插入 ~~~ $data = [ ['name' => 'xiaoliu', 'content' => 'hahahaha'], ['name' => 'xiaoliu', 'content' => 'hahahaha'], ['name' => 'xiaoliu', 'content' => 'hahahaha'], ['name' => 'xiaoliu', 'content' => 'hahahaha'], ]; $success = PDO::batchInsert('post', $data)->execute(); // 獲得受影響的行數 $affectedRows = PDO::getRowCount(); ~~~ ## 更新 常規更新: ~~~ $set = [ 'num' => 2, 'name' => 'xiaoliu2', ]; $where = [ ['id', '=', 23], ]; $success = PDO::update('post', $set, $where)->execute(); // 獲得受影響的行數 $affectedRows = PDO::getRowCount(); ~~~ 自增、自減: ~~~ $set = [ 'num' => ['+', 2], 'num1' => ['-', 1], ]; $where = [ ['id', '=', 23], ]; $success = PDO::update('post', $set, $where)->execute(); // 獲得受影響的行數 $affectedRows = PDO::getRowCount(); ~~~ ## 刪除 ~~~ $success = PDO::delete('post', [['id', '=', 15]])->execute(); // 獲得受影響的行數 $affectedRows = PDO::getRowCount(); ~~~ ## 查詢 ### 執行原生 `SQL` >[danger] 請不要直接把參數拼接在 SQL 內執行,帶參數的 SQL 請使用參數綁定。 ~~~ $rows = PDO::createCommand("SELECT * FROM `post`")->queryAll(); ~~~ ### 參數綁定 普通參數綁定: ~~~ $sql = "SELECT * FROM `post` WHERE id = :id AND name = :name"; $rows = PDO::createCommand($sql)->bindParams([ 'id' => 28, 'name' => 'xiaoliu', ])->queryOne(); ~~~ `IN`、`NOT IN` 參數綁定: > `PDO` 擴展是不支持綁定數組參數的,所以 WHERE IN 都只能直接 `implode(', ',$array)` 拼接到 SQL 里面,MixPHP 幫你做了這一步,所以只需像下面這樣使用。 ~~~ $sql = "SELECT * FROM `post` WHERE id IN (:id)"; $rows = PDO::createCommand($sql)->bindParams([ 'id' => [28, 29, 30], ])->queryAll(); ~~~ ### 查詢組合 MixPHP 推崇原生 SQL 查詢數據庫,但由于原生 SQL 在動態 Where 時,做參數綁定會導致邏輯有些復雜,所以 MixPHP 封裝了一個查詢組合的功能,方便動態控制 Where 與 自動參數綁定。 用戶可將整個 SQL 拆分為多個部分,每個部分可選擇使用下例兩個參數: - `params` 字段內的值會綁定到對應的sql中。 - `if` 字段的值為 false 時,該段 SQL 會丟棄。 常用查詢組合: ~~~ $rows = PDO::createCommand([ ['SELECT * FROM `post`'], ['WHERE id = :id AND name = :name ORDER BY id ASC', 'params' => [ 'id' => $this->id, 'name' => $this->name, ], ], ])->queryAll(); ~~~ 動態 Where 查詢組合: ~~~ $rows = PDO::createCommand([ ['SELECT * FROM `post` WHERE 1 = 1'], ['AND id = :id', 'params' => ['id' => $this->id], 'if' => isset($this->id)], ['AND name = :name', 'params' => ['name' => $this->name], 'if' => isset($this->name)], ['ORDER BY `post`.id ASC'], ])->queryAll(); ~~~ >[info] WHERE 1 = 1 是一個小技巧,能避免沒有 Where 時 SQL 錯誤的情況出現。 更復雜的查詢組合,包含了: - 動態 Join - 動態 Where - 分頁 ~~~ $rows = PDO::createCommand([ ['SELECT *'], ['FROM `post`'], [ 'INNER JOIN `user` ON `user`.id = `post`.id', 'if' => isset($this->name), ], ['WHERE 1 = 1'], [ 'AND `post`.id = :id', 'params' => ['id' => $this->id], 'if' => isset($this->id), ], [ 'AND `user`.name = :name', 'params' => ['name' => $this->name], 'if' => isset($this->name), ], ['ORDER BY `post`.id ASC'], ['LIMIT :offset, :rows', 'params' => ['offset' => ($this->currentPage - 1) * $this->perPage, 'rows' => $this->perPage]], ])->queryAll(); ~~~ ## 查詢返回結果集 返回多行,每行都是列名和值的關聯數組。 > 沒有結果返回空數組。 ~~~ $rows = PDO::createCommand("SELECT * FROM `post`")->queryAll(); ~~~ 返回一行 (第一行)。 > 沒有結果返回 false。 ~~~ $row = PDO::createCommand("SELECT * FROM `post` WHERE id = 28")->queryOne(); ~~~ 返回一列。 > 沒有結果返回空數組。 ~~~ // 第一列 $titles = PDO::createCommand("SELECT title FROM `post`")->queryColumn(); // 第二列 $titles = PDO::createCommand("SELECT * FROM `post`")->queryColumn(1); ~~~ 返回一個標量值。 > 如果該查詢沒有結果則返回 false。 ~~~ $count = PDO::createCommand("SELECT COUNT(*) FROM `post`")->queryScalar(); ~~~ 返回一個原生結果集 `PDOStatement` 對象。 > 通常在查詢大量結果時,為了避免內存溢出時使用。 ~~~ $result = PDO::createCommand("SELECT * FROM `post`")->query(); while ($item = $result->fetch()) { var_dump($item); } ~~~ ## 返回原生 SQL 語句 `PDO` 擴展是無法獲取最近執行的 SQL 的,所以這個功能是 MixPHP 通過參數構建出來的,這個在調試時是非常好用的功能。 ~~~ $sql = PDO::getRawSql(); ~~~ ## 事務 手動事務: ~~~ PDO::beginTransaction(); try { PDO::insert('test', [ 'text' => '測試測試', ])->execute(); PDO::commit(); } catch (\Exception $e) { PDO::rollback(); throw $e; } ~~~ 自動事務:等同于上面的手動事務。 ~~~ PDO::transaction(function () { PDO::insert('test', [ 'text' => '測試測試', ])->execute(); }); ~~~
                  <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>

                              哎呀哎呀视频在线观看