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数据库操作方案,您可以根据自己的喜好来定夺采取何种方式。

时间: 2024-08-01 10:43:55

10天学会phpWeChat——第九天:数据库增、删、改、查(CRUD)操作的相关文章

数据库的增,删,改,查的操作示例

public class Test extends AndroidTestCase { private shujuku shu; private SQLiteDatabase db; // 测试方法执行前调用 @Override protected void setUp() throws Exception { // TODO Auto-generated method stub   super.setUp(); shu = new shujuku(getContext()); // 拿到数据库

MySql 执行JDBC联接(增/删/改/查)操作

视频地址:http://www.tudou.com/programs/view/4GIENz1qdp0/ 新建BaseDao package cn.wingfly.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class BaseDao

Python---MySQL数据库之四大操作(增 删 改 查)

一.对数据库,表,记录---四大操作(增 删 改 查) 1.操作数据库 (1)对数据库(文件夹):进行增加操作 Create  database  库名; 例:  Create  database  db7 ; 查询库: show  databases; 结果: +-----------------------------+ | Database                   | +----------------------------+ | information_schema | |

ADO.NET 增 删 改 查

ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访问技术的基础 连接数据库基本格式:需要两个类1.数据库连接类 SqlConnection2.数据库操作类 SqlCommand 1.连接数据库写连接字符串,立马就要想到有4点要写完,1.连接哪台服务器,2.连接哪个数据库,3.连接用户名,4.密码string sql = "server=.(服务器i

Android 增,删,改,查 通讯录中的联系人

一.权限 操作通讯录必须在AndroidManifest.xml中先添加2个权限, <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission> <uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>

数据库基础学习4--表格的 增 删 改 查(简单查询与高级查询)

一.增 C:create 增加,创建,向数据库里面添加数据. insert into Fruit values('K009','苹果',3.0,'高青',90,'') insert into Fruit(Ids,Name,Price,Source,Numbers) values('K010','苹果',3.0,'高青',90) 二.改 U:update修改,从数据库表里面修改数据. update Fruit set Source='烟台' where Ids='K001' 三.删 D:delet

php基础:数据库的含义和基本操作 增 删 改 查

//数据库是帮我们管理数据的一个软件,我们将数据给他,放进数据库里.他能很稳妥的帮我们管理起来,且效率很高.//php的大部分工作就是  php->连接数据库->写入数据->查出数据->格式化数据->显示出来,//数据库管理数据是以表的形式组成的,多行多列,表头声明好了,一个表创建好了,剩下的就是往里面添加数据 多张表放在一个文件夹里面就形成了库  mysql服务器帮我们管理多个库C:\wamp\bin\mysql\mysql5.6.12\data   数据库中的数据放在这个

数据库的增 删 改 查语句汇总

(select * from xxx  - -查询语句) 一:新建数据库 (xxx表示名称) use XXX - -指向当前所操作的数据库 go create table xxx - -新建表关键字 (  列的名称 数据类型 not null,  列的名称 数据类型 not null,  列的名称 数据类型 not null  (  idenitiy(1,1)- -表示标识,标识种子为1增长为1     )  (  primary key (列名) - -设置主键                

怎样从C#中打开数据库并进行 增 删 改 查 操作

首先 在C#中引用数据库的操作! (因为我们用的是SQLserver数据库,所以是SqlClient) using System.Data.SqlClient; 1:要实现对数据库的操作,我们必须先登录数据库 Console.WriteLine("请输入用户名:"); //提示客户输入用户名和密码 string name = Console.ReadLine(); Console.WriteLine("请输入密码:"); string pwd = Console.R