10天學會phpWeChat——第九天:數據庫增、刪、改、查(CRUD)操做

數據庫的操做(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數據庫操做方案,您能夠根據本身的喜愛來定奪採起何種方式。

 

 

《10天學會phpWeChat》系列教程傳送門:

相關文章
相關標籤/搜索