數據庫的操做(CRUD)是一個現代化計算機軟件的核心,尤爲針對web應用軟件。雖然在前面的幾講裏,咱們針對數據庫操做大體有了一些瞭解,但今天咱們須要再次強化下。php
除了新瓶裝老酒,咱們今天還引入一個新的數據庫操做方法:連貫操做。html
今天講解的內容是基於phpWeChat核心框架1.1.3版本,前端
下載地址:http://s.phpwechat.com/app_38026ed22fc1a91d92b5d2ef93540f20mysql
框架更新:http://bbs.phpwechat.com/forum-2-1.htmlweb
若是您的核心框架不是1.1.3,強烈建議您升級版本,升級時,請注意由低版本到高版本逐級升級,請不要跨版本升級。sql
咱們今天的講解以hello world模塊建立的pw_wechat_hello_article表爲例,並在控制器裏寫一個case 'test':來進行實際演示。數據庫
1、MySql數據操做類的傳統方法及參數說明數組
phpWeChat 封裝了常見的 MySql 增、刪、改操做,具體方法以下表所示。微信
假設咱們建立了一個 pw_wechat_hello_article表,含有自增的 id(INT),標題 title(VARCHAR),內容 content(TEXT) 3個字段。app
MySql 操做方法 | 參數說明 | 函數說明 | 用法舉例 |
MySql::insert($tbname,$info) | $tbname 指表名 $info是一個數組 |
將$info包含的數據插入到表$tbname中,成功時返回插入的記錄ID | MySql::insert('pw_wechat_hello_article',array('title'=>'標題內容','content'=>'內容詳情')); |
MySql::update($tbname,$info,$where) | $tbname 指表 名$info是一個數組 $where是條件 |
修改知足條件$where的記錄 | MySql::update('pw_wechat_hello_article',array('title'=>'標題內容','content'=>'內容詳情'),'id=1'); |
MySql::mysqlDelete($tbname,$id,$field) | $tbname 指表 $id是指知足的字段值 $field是指知足條件的字段名稱 |
刪除知足條件$field=$id的記錄 | MySql::mysqlDelete('pw_wechat_hello_article',1,'id'); |
MySql::fetchOne($sql) | $sql 指SQL語句 | 返回知足$sql的一條記錄 | MySql::fetchOne("SELECT * FROM pw_wechat_hello_article WHERE id=1"); |
MySql::fetchAll($sql) | $sql 指SQL語句 | 返回知足$sql的多條記錄 | MySql::fetchAll("SELECT * FROM pw_wechat_hello_article WHERE id>1 LIMIT 0,10"); |
MySql::query($sql) | $sql 指SQL語句 | 執行$sql語句 | MySql::query("DELETE FROM pw_wechat_hello_article WHERE id=1"); |
MySql::lastInsertId() | - | 返回最後插入的ID | $insertID= MySql::lastInsertId(); |
MySql::getCount($tbname) | $tbname 指表名 | 返回$tbname 表的記錄條數 | $counts=MySql::getCount('pw_wechat_hello_article'); |
2、Read——數據庫讀操做的傳統操做和連貫操做示例
一、讀取pw_wechat_hello_articleID大於1的2條多條記錄並按照ID降序排列:
控制器代碼:
1 <?php 2 //自適應模塊的PC前端控制器 3 use wechat\hello\hello; 4 use phpWeChat\Area; 5 use phpWeChat\CaChe; 6 use phpWeChat\Config; 7 use phpWeChat\Member; 8 use phpWeChat\Module; 9 use phpWeChat\MySql; 10 use phpWeChat\Order; 11 use phpWeChat\Upload; 12 13 !defined('IN_APP') && exit('Access Denied!'); 14 15 switch($action) 16 { 17 case 'test': 18 //傳統SQL寫法 19 $data=MySql::fetchAll("SELECT * FROM ".DB_PRE."wechat_hello_article WHERE id>1 ORDER BY id DESC LIMIT 0,2"); 20 print_r($data); 21 22 //連貫操做 23 $article=M('wechat_hello_article'); 24 $data=$article->where('id>1')->order('id','desc')->limit(2)->select(); 25 print_r($data); 26 exit(); 27 break; 28 case 'index': 29 //從數據表讀取數據並賦給數組$data 30 //$data=Hello::dataList(); 31 echo '這是自適應模塊的PC端前端控制器'; 32 exit(); 33 break; 34 case 'detail': 35 $data=Hello::dataGet($id); //$id 能夠改爲$_GET['id'] 36 break; 37 case 'tougao': 38 39 break; 40 case 'tougaosave': 41 $info['pics']=deformat_focus_img('pics'); //多圖上傳的特殊處理,其餘類型不須要 42 43 print_r($info); 44 exit(); 45 46 /* 47 $op=Hello::dataInsert($info); 48 49 if($op) 50 { 51 echo '文章投稿成功,ID爲'.$op; 52 } 53 else 54 { 55 echo '文章投稿失敗'; 56 } 57 exit(); 58 */ 59 break; 60 //如下 case 條件僅爲 示例。您能夠根據業務邏輯自由修改和拓展 61 62 //case 'index': 63 64 //在此寫 index.php?m=hello&a=index 時的邏輯 65 66 //break; 67 68 //case 'list': 69 70 //在此寫 index.php?m=hello&a=list 時的邏輯 71 72 //break; 73 74 //以此類推... 75 76 //case '...': 77 78 //在此寫 index.php?m=hello&a=... 時的邏輯 79 80 //break; 81 82 default: 83 break; 84 } 85 ?>
效果:
如圖,在控制器中,傳統操做和連貫操做的效果是同樣的,只是連貫操做給人感受更簡潔、更炫酷。
二、讀取pw_wechat_hello_article ID爲2的1條記錄:
1 <?php 2 //自適應模塊的PC前端控制器 3 use wechat\hello\hello; 4 use phpWeChat\Area; 5 use phpWeChat\CaChe; 6 use phpWeChat\Config; 7 use phpWeChat\Member; 8 use phpWeChat\Module; 9 use phpWeChat\MySql; 10 use phpWeChat\Order; 11 use phpWeChat\Upload; 12 13 !defined('IN_APP') && exit('Access Denied!'); 14 15 switch($action) 16 { 17 case 'test': 18 //傳統SQL寫法 19 $data=MySql::fetchOne("SELECT * FROM ".DB_PRE."wechat_hello_article WHERE id=5"); 20 print_r($data); 21 22 //連貫查詢 23 $article=M('wechat_hello_article'); 24 $data=$article->where('id=5')->find(); 25 print_r($data); 26 exit(); 27 break; 28 case 'index': 29 //從數據表讀取數據並賦給數組$data 30 //$data=Hello::dataList(); 31 echo '這是自適應模塊的PC端前端控制器'; 32 exit(); 33 break; 34 case 'detail': 35 $data=Hello::dataGet($id); //$id 能夠改爲$_GET['id'] 36 break; 37 case 'tougao': 38 39 break; 40 case 'tougaosave': 41 $info['pics']=deformat_focus_img('pics'); //多圖上傳的特殊處理,其餘類型不須要 42 43 print_r($info); 44 exit(); 45 46 /* 47 $op=Hello::dataInsert($info); 48 49 if($op) 50 { 51 echo '文章投稿成功,ID爲'.$op; 52 } 53 else 54 { 55 echo '文章投稿失敗'; 56 } 57 exit(); 58 */ 59 break; 60 //如下 case 條件僅爲 示例。您能夠根據業務邏輯自由修改和拓展 61 62 //case 'index': 63 64 //在此寫 index.php?m=hello&a=index 時的邏輯 65 66 //break; 67 68 //case 'list': 69 70 //在此寫 index.php?m=hello&a=list 時的邏輯 71 72 //break; 73 74 //以此類推... 75 76 //case '...': 77 78 //在此寫 index.php?m=hello&a=... 時的邏輯 79 80 //break; 81 82 default: 83 break; 84 } 85 ?>
效果:
小貼士:
傳統操做的MySql::fetchAll()方法等同於連貫操做的select()方法,他們都返回一個由結果集組成的二維數組。
傳統操做的MySql::fetchOne()方法等同於連貫操做的find()方法,他們都返回一個指定結果的一維數組。
3、Create——數據庫寫操做的傳統操做和連貫操做示例
向數據庫插入一條記錄。
1 <?php 2 //自適應模塊的PC前端控制器 3 use wechat\hello\hello; 4 use phpWeChat\Area; 5 use phpWeChat\CaChe; 6 use phpWeChat\Config; 7 use phpWeChat\Member; 8 use phpWeChat\Module; 9 use phpWeChat\MySql; 10 use phpWeChat\Order; 11 use phpWeChat\Upload; 12 13 !defined('IN_APP') && exit('Access Denied!'); 14 15 switch($action) 16 { 17 case 'test': 18 $info=array(); 19 $info['title']='要插入的標題'; 20 $info['content']='要插入的內容'; 21 22 //傳統SQL寫法 23 $insert_id=MySql::insert(DB_PRE."wechat_hello_article",$info); 24 echo('插入的ID'.$insert_id); 25 26 //連貫查詢 27 $article=M('wechat_hello_article'); 28 $insert_id=$article->add($info); //或者 $data=$article->data($info)->add(); 29 echo('插入的ID'.$insert_id); 30 exit(); 31 break; 32 case 'index': 33 //從數據表讀取數據並賦給數組$data 34 //$data=Hello::dataList(); 35 echo '這是自適應模塊的PC端前端控制器'; 36 exit(); 37 break; 38 case 'detail': 39 $data=Hello::dataGet($id); //$id 能夠改爲$_GET['id'] 40 break; 41 case 'tougao': 42 43 break; 44 case 'tougaosave': 45 $info['pics']=deformat_focus_img('pics'); //多圖上傳的特殊處理,其餘類型不須要 46 47 print_r($info); 48 exit(); 49 50 /* 51 $op=Hello::dataInsert($info); 52 53 if($op) 54 { 55 echo '文章投稿成功,ID爲'.$op; 56 } 57 else 58 { 59 echo '文章投稿失敗'; 60 } 61 exit(); 62 */ 63 break; 64 //如下 case 條件僅爲 示例。您能夠根據業務邏輯自由修改和拓展 65 66 //case 'index': 67 68 //在此寫 index.php?m=hello&a=index 時的邏輯 69 70 //break; 71 72 //case 'list': 73 74 //在此寫 index.php?m=hello&a=list 時的邏輯 75 76 //break; 77 78 //以此類推... 79 80 //case '...': 81 82 //在此寫 index.php?m=hello&a=... 時的邏輯 83 84 //break; 85 86 default: 87 break; 88 } 89 ?>
效果:
小貼士:
傳統操做的MySql::insert()方法等同於連貫操做的add()方法,成功插入時,他們都返回插入的記錄ID,失敗時,返回FALSE。
4、Update——數據庫更新操做的傳統操做和連貫操做示例
更新ID爲11的文章標題爲「我是新標題」。
1 <?php 2 //自適應模塊的PC前端控制器 3 use wechat\hello\hello; 4 use phpWeChat\Area; 5 use phpWeChat\CaChe; 6 use phpWeChat\Config; 7 use phpWeChat\Member; 8 use phpWeChat\Module; 9 use phpWeChat\MySql; 10 use phpWeChat\Order; 11 use phpWeChat\Upload; 12 13 !defined('IN_APP') && exit('Access Denied!'); 14 15 switch($action) 16 { 17 case 'test': 18 $info=array(); 19 $info['title']='我是新標題'; 20 21 //傳統SQL寫法 22 MySql::update(DB_PRE."wechat_hello_article",$info,'id=11'); 23 24 //連貫查詢 25 $article=M('wechat_hello_article'); 26 $article->where('id=11')->data($info)->save(); //或者 $data=$article->save($info); 27 28 exit(); 29 break; 30 case 'index': 31 //從數據表讀取數據並賦給數組$data 32 //$data=Hello::dataList(); 33 echo '這是自適應模塊的PC端前端控制器'; 34 exit(); 35 break; 36 case 'detail': 37 $data=Hello::dataGet($id); //$id 能夠改爲$_GET['id'] 38 break; 39 case 'tougao': 40 41 break; 42 case 'tougaosave': 43 $info['pics']=deformat_focus_img('pics'); //多圖上傳的特殊處理,其餘類型不須要 44 45 print_r($info); 46 exit(); 47 48 /* 49 $op=Hello::dataInsert($info); 50 51 if($op) 52 { 53 echo '文章投稿成功,ID爲'.$op; 54 } 55 else 56 { 57 echo '文章投稿失敗'; 58 } 59 exit(); 60 */ 61 break; 62 //如下 case 條件僅爲 示例。您能夠根據業務邏輯自由修改和拓展 63 64 //case 'index': 65 66 //在此寫 index.php?m=hello&a=index 時的邏輯 67 68 //break; 69 70 //case 'list': 71 72 //在此寫 index.php?m=hello&a=list 時的邏輯 73 74 //break; 75 76 //以此類推... 77 78 //case '...': 79 80 //在此寫 index.php?m=hello&a=... 時的邏輯 81 82 //break; 83 84 default: 85 break; 86 } 87 ?>
效果:
小貼士:
傳統操做的MySql::update()方法等同於連貫操做的save()方法,用於記錄更新。
5、Delete——數據庫刪除操做的傳統操做和連貫操做示例
刪除ID爲11的文章。
1 <?php 2 //自適應模塊的PC前端控制器 3 use wechat\hello\hello; 4 use phpWeChat\Area; 5 use phpWeChat\CaChe; 6 use phpWeChat\Config; 7 use phpWeChat\Member; 8 use phpWeChat\Module; 9 use phpWeChat\MySql; 10 use phpWeChat\Order; 11 use phpWeChat\Upload; 12 13 !defined('IN_APP') && exit('Access Denied!'); 14 15 switch($action) 16 { 17 case 'test': 18 //傳統SQL寫法 19 MySql::mysqlDelete(DB_PRE."wechat_hello_article",11,'id'); 20 21 //連貫查詢 22 $article=M('wechat_hello_article'); 23 $article->where('id=11')->delete(); 24 25 exit(); 26 break; 27 case 'index': 28 //從數據表讀取數據並賦給數組$data 29 //$data=Hello::dataList(); 30 echo '這是自適應模塊的PC端前端控制器'; 31 exit(); 32 break; 33 case 'detail': 34 $data=Hello::dataGet($id); //$id 能夠改爲$_GET['id'] 35 break; 36 case 'tougao': 37 38 break; 39 case 'tougaosave': 40 $info['pics']=deformat_focus_img('pics'); //多圖上傳的特殊處理,其餘類型不須要 41 42 print_r($info); 43 exit(); 44 45 /* 46 $op=Hello::dataInsert($info); 47 48 if($op) 49 { 50 echo '文章投稿成功,ID爲'.$op; 51 } 52 else 53 { 54 echo '文章投稿失敗'; 55 } 56 exit(); 57 */ 58 break; 59 //如下 case 條件僅爲 示例。您能夠根據業務邏輯自由修改和拓展 60 61 //case 'index': 62 63 //在此寫 index.php?m=hello&a=index 時的邏輯 64 65 //break; 66 67 //case 'list': 68 69 //在此寫 index.php?m=hello&a=list 時的邏輯 70 71 //break; 72 73 //以此類推... 74 75 //case '...': 76 77 //在此寫 index.php?m=hello&a=... 時的邏輯 78 79 //break; 80 81 default: 82 break; 83 } 84 ?>
效果:
小貼士:
傳統操做的MySql::mysqlDelete()方法等同於連貫操做的delete()方法,用於刪除記錄。可是連貫操做更簡潔易懂。
總結:在1.1.3+版本的phpWeChat中已兼容支持這兩種MySql數據庫操做方案,您能夠根據本身的喜愛來定奪採起何種方式。