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


數據庫的操作(CRUD)是一個現代化計算機軟件的核心,尤其針對web應用軟件。雖然在前面的幾講里,我們針對數據庫操作大致有了一些了解,但今天我們需要再次強化下。

除了新瓶裝老酒,我們今天還引入一個新的數據庫操作方法:連貫操作。

今天講解的內容是基於phpWeChat核心框架1.1.3版本,

下載地址:http://s.phpwechat.com/app_38026ed22fc1a91d92b5d2ef93540f20

框架更新:http://bbs.phpwechat.com/forum-2-1.html

如果您的核心框架不是1.1.3,強烈建議您升級版本,升級時,請注意由低版本到高版本逐級升級,請不要跨版本升級。

我們今天的講解以hello world模塊創建的pw_wechat_hello_article表為例,並在控制器里寫一個case 'test':來進行實際演示。

一、MySql數據操作類的傳統方法及參數說明

phpWeChat 封裝了常見的 MySql 增、刪、改操作,具體方法如下表所示。

假設我們創建了一個 pw_wechat_hello_article表,含有自增的 id(INT),標題 title(VARCHAR),內容 content(TEXT) 3個字段。

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');            

 

二、Read——數據庫讀操作的傳統操作和連貫操作示例

1、讀取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 ?>

效果:

如圖,在控制器中,傳統操作和連貫操作的效果是一樣的,只是連貫操作給人感覺更簡潔、更炫酷。

2、讀取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()方法,他們都返回一個指定結果的一維數組。

 

三、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。

四、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()方法,用於記錄更新。

五、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》系列教程傳送門:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM