## 原生SQL: 寫操作(execute方法)
#### 一、TP5原生寫操作是通過Query類的execute()方法來實現
#### 學習之前,先簡單回顧了寫操作常識:
* <span style="color:forestgreen">數據表操作包括(增加、刪除、修改、查詢),即大家常說的:增刪改,英文縮寫:CURD。</span>
* 操作語句主要有4個,他們的語法和說明:
| 序號 |名稱|關鍵字 | 語法 | 舉例 |
| --- | --- | ---|--- | --- |
| 1 | 新增 | INSERT | INSERT 表名 (字段列表) VALUES (值列表) | INSERT staff (name,salary) VALUES ('周軍',4500); |
| 2 | 刪除 | DELETE | DELETE FROM 表名 WHERE 條件 | DELETE FROM staff WHERE id = 1005; |
| 3| 更新 | UPDATE | UPDATE 表名 SET 字段 = 新值 WHERE 條件 | UPDATE staff SET salary = salary + 200 WHERE id = 1005; |
| 4 | 查詢 | SELECT | SELECT 字段列表 FROM 表名 WHERE 條件 | SELECT name,salary FROM staff WHERE id > 1005; |
#### 前三個是寫操作(即執行后,表中記錄發生了變化)
#### 現在回到TP 5
* execute()方法定義在:db/Query.php 類文件中

* 該方法功能是:執行寫操作,參數有2個:
* 執行寫操作的SQL語句字符串:$sql;
* 用數組方式綁定的參數:$bind。
* * * * *
#### 2、Db類直接靜態調用execute()方法
* 靜態調用方式(大家先熟悉這種方式)
>[info]關于靜態調用和SQL語句生成的的基本知識,我們在上一節讀操作有詳細介紹,這里不再重復。
#### 實例1:在tp5_staff表中添加新員工
* 目前數據表tp5_staff記錄如下:

* Index.php 控制器代碼如下:
~~~
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller {
public function index(){
//創建SQL語句字符串
$sql = "INSERT tp5_staff (name,sex,age,salary,dept,hiredate) VALUES ('李云龍',1,39,4800,'開發部','2011-09-12');";
//執行插入操作
$affected = Db::execute($sql);
//判斷是否執行成功
if ($affected){
$this->success('插入成功!',url('ok'));
}else{
$this->error('插入失敗');
}
}
//定義操作成功的方法
public function ok(){
echo '<h2>您已成功的執行了該語句</h2>';
}
}
~~~
* 運行結果如下:

* * * * *
#### 為防止SQL注入,推薦用命名占位符傳參方式構造SQL語句
* 經過改進后的Index.php控制器代碼如下:
~~~
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller {
public function index(){
//創建SQL語句字符串
$sql = "INSERT tp5_staff (name,sex,age,salary,dept,hiredate) VALUES (:name,:sex,:age,:salary,:dept,:hiredate);";
//執行插入操作
$affected = Db::execute($sql,['name'=>'李云龍','sex'=>1,'age'=>30,'salary'=>4800,'dept'=>'開發部','hiredate'=>'2011-09-12']);
//判斷是否執行成功
if ($affected){
$this->success('插入成功!',url('ok'),10);
}else{
$this->error('插入失敗');
}
}
//定義操作成功的方法
public function ok(){
echo '<h2>您已成功的執行了該語句</h2>';
}
}
~~~
* 運行效果與第一方式完全一樣,這里不再截圖演示了。
* * * * *
><font color="red"> 下面語句全部采用:命名點位符綁定參數方式</font>
#### 實例2:刪除tp5_staff表中id大于1012的記錄
* Index.php控制器代碼如下:
~~~
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller {
public function index(){
//創建SQL語句字符串
$sql = "DELETE FROM tp5_staff WHERE id > :id;";
//執行插入操作
$affected = Db::execute($sql,['id'=>'1012']);
//判斷是否執行成功
if ($affected){
//延時10秒,是為了方便截圖,默認為3秒
$this->success('刪除成功!',url('ok'),'',10);
}else{
$this->error('刪除失敗');
}
}
//定義操作成功的方法
public function ok(){
echo '<h2>您已成功的執行了該語句</h2>';
}
}
~~~
* 運行效果如下:

* * * * *
#### 實例3:更新id = 1012的記錄,將姓名改為:楚云飛,部門改為市場部
* Index.php 控制器類代碼:
~~~
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller {
public function index(){
//創建SQL語句字符串
$sql = "UPDATE tp5_staff SET name = :name , dept = :dept WHERE id = :id;";
//執行插入操作
$affected = Db::execute($sql,['name'=>'楚云飛','dept'=>'市場部','id'=>'1012']);
//判斷是否執行成功
if ($affected){
$this->success('更新成功!',url('ok'),'',10);
}else{
$this->error('更新失敗');
}
}
//定義操作成功的方法
public function ok(){
echo '<h2>您已成功的執行了該語句</h2>';
}
}
~~~
* 運行結果:

* * * * *
### 請同學們課后,將所有代碼親自上機調試,不要簡單的復制粘貼。
- 前言[隨時更新]
- ThinkPHP 5數據庫重構
- 開發環境
- 1.ThinkPHP5開發環境(Mac版)
- 2.ThinkPHP5開發環境(Win版)
- MySQL快速復習
- 1.數據庫操作
- 2.數據表操作
- 1.創建數據表 (重點)
- 2.添加數據表記錄
- 3.查詢數據表(重點)
- 4.更新數據表
- 5.編輯數據表結構(重點)
- 6_復制數據表
- 7.刪除數據和表
- 連接數據庫
- 1.數據庫配置文件database.php
- 2.Db類靜態方法connect()
- 3.模塊中的配置文件config.php
- MySQL原生查詢
- 1.讀操作query
- 2.寫操作execute
- 選擇數據表
- 1.table與setTable方法
- 2.name方法
- 3.db助手函數
- 4.alias方法
- 結果集查詢
- 1.find方法
- 2.select方法
- 3.fetchSql方法
- 4.value方法
- 5.column方法
- 6.field方法
- 新增數據
- 1.insert_單條添加
- 2.insertAll_批量添加
- 3_db_助手函數添加
- 更新數據
- 1.update方法
- 2.setField更新字段
- 3_自增自減與延時更新
- 刪除數據
- 1.delete方法
- 查詢方法
- 1.getTableInfo方法
- 2.where方法
- 3.whereOr方法
- 4.混合查詢(閉包實現)
- 表達式查詢
- 1.表達式查詢(重點)
- 2.exp通用查詢
- 分組查詢
- 1.group方法
- 2.having方法
- 排序分頁查詢
- 1.order方法
- 2.limit方法
- 3.page方法
- 聚合查詢
- 時間查詢
- 1.where方法
- 2.whereTime方法
- 高級查詢
- 1.快捷查詢
- 2.區間查詢
- 3.批量查詢
- 4.Query對象查詢
- 5.混合查詢
- 視圖查詢
- view方法
- 子查詢
- 1.select方法
- 2.fetchSql方法
- 3.buildSql方法
- 4.閉包子查詢
- 總結/參考
- 1.方法參數類型總結
- 2.查詢/子查詢/連接查詢