10天学会phpWeChat——第九天:数据库增删改查(CRUD)操作

Posted 奔四少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\':
以上是关于10天学会phpWeChat——第九天:数据库增删改查(CRUD)操作的主要内容,如果未能解决你的问题,请参考以下文章

10天学会phpWeChat——第五天:实现新闻投稿功能

10天学会phpWeChat——第三天:从数据库读取数据到视图

10天学会phpWeChat——第二天:hello world!我的第一个功能模块

10天学会phpWeChat——第八天:Form类,丰富表单提交的字段类型

统计师的Python日记第九天:正则表达式

WPF 10天修炼 第九天 - 几何图形