前言 看到這一篇想必你一定會覺得很茫然為什麼要突然從 Model 基礎操作跳到資料操作呢?主要原因是想讓你明白,其實也可以使用原生的寫法來操作資料,而且不需要透過 Model,那麼就讓我們一探究竟吧!
起手式 首先如果我們想要在 Controller 中操作 DB,那就必須引入 ThinkPHP 所提供的函式庫,否則是無法操控 DB 的:
那麼由於為了避免搞混以及我個人想保留每一段我撰寫的程式碼,所以我另外建立的一個資料夾叫做 dbexample 並建立相關檔案,內容部分就不額外提供 ↓
最主要的 Controller 初始內容會提供在這裡:
1 2 3 4 5 6 7 8 9 10 11 12 13 <?php namespace app \dbexample \controller ;use think \Controller ;use think \Db ;class Index extends Controller { public function index ( ) { } }
原生 SQL 接下來我們在前面有學過原生的 SQL 語法,首先先讓我們建立一個資料表叫 think_db:
1 2 3 4 5 CREATE TABLE think_db ( id int (10 ) NOT NULL auto_increment, name varchar (5 ) NOT NULL default '' , PRIMARY KEY (id) ) AUTO_INCREMENT= 1 ;
那後面我們就可以開始準備在 Controller 中使用原生的語法,也就是新增、查詢、編輯、刪除等動作,但是這邊要注意一件事,我們將會透過剛剛引入的函式庫,也就是 Db 來撰寫原生 SQL 語法,基本語法是使用 Db::execute,除了查詢是使用 Db::query,其餘都是使用 Db::execute 的方式。
新增資料 使用的方式很簡單,只需要在 Db::execute('SQL 指令') 裡面寫入 SQL 指令就可以達到我們要的效果,這邊舉例新增資料:
1 2 $result = Db ::execute ('INSERT INTO think_db (name) VALUE ("王大明")' );dump ($result );
最後請務必記得語法結束後,要補上 dump(),否則並不會執行你的 SQL 指令。
編輯資料 1 2 $result = Db ::execute ('UPDATE think_db SET name="QQ 先生"' );dump ($result );
查詢資料 前面有講到唯獨查詢是使用 Db::query() 的方式,所以在撰寫上要稍微注意一下:
1 2 $result = Db ::query ('SELECT think_db SET name="QQ 先生"' );dump ($result );
刪除資料 1 2 $result = Db ::query ('DELETE think_db SET name="QQ 先生"' );dump ($result );
完整程式碼 那麼我們可以將上方新增、編輯、查詢以及刪除的 SQL 指令,個別包成一個 function,稍後透過路由來訪問 Controller 進而執行這些 SQL 指令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public function add ( ) { $result = Db ::execute ('INSERT INTO think_db (name) VALUE ("王大明")' ); dump ($result ); }public function update ( ) { $result = Db ::execute ('UPDATE think_db SET name="QQ 先生" WHERE name="王大明"' ); dump ($result ); }public function select ( ) { $result = Db ::query ('SELECT * FROM think_db WHERE name="QQ 先生"' ); dump ($result ); }public function delete ( ) { $result = Db ::execute ('DELETE FROM think_db WHERE name="QQ 先生"' ); dump ($result ); }
Route 註冊路由的部分比較沒有什麼好講的,因為只是要作範例,所以我這邊一路都使用 get 來註冊路由:
1 2 3 4 Route ::get ('/dbexample/add' , 'dbexample/index/add' );Route ::get ('/dbexample/update' , 'dbexample/index/update' );Route ::get ('/dbexample/select' , 'dbexample/index/select' );Route ::get ('/dbexample/delete' , 'dbexample/index/delete' );
接下來我會建議依照我建議的流程來瀏覽 URL,避免出現無法訪問之問題。
1 建議流程:add → updata → select → delete (否則可能出現錯誤)
那麼我這邊就只附上查詢的結果 ↓
切換資料庫連接 當然你也可以透過 Db 中其中一個方法來切換資料庫連結,也就是 Db::connect([資料庫連接]),範例如下:
1 2 $result = Db ::connect ('mysql://root:123456@localhost:3306/ithelp' )->query ('SELECT * FROM think_db WHERE name="QQ 先生"' );dump ($result );
但是這種方式並不是非常好,最主要會導致程式碼複雜並且難以維護,所以一般來講我們會在 application 底下增加一個檔案叫 config.php,並依照 project/config 底下的 database.php 內容當作範例,然後製作成一個陣列,並依照相關參數這樣傳入即可:
1 2 3 4 $result1 = Db ::connect ('qq1' )->query ('SELECT * FROM think_db WHERE name="QQ 先生"' );dump ($result2 );$result2 = Db ::connect ('qq2' )->query ('SELECT * FROM think_db WHERE name="QQ 先生"' );dump ($result2 );
那麼這就是切換資料庫連接的方式,但是上方的範例我這邊就不實作,因為這種方式我實際上並沒有開發以及使用過,而且也比較少遇到這種狀況。
結尾 我們可以發現若不透過 Model 來操作資料是一件非常麻煩的事情,而且這些動作也不符合 MVC 觀念,畢竟沒有將 Model 的邏輯給切出來,所以當系統越來越龐大時,就會導致系統維護上的困擾。
整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ
Advertisement