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——第二天:hello world!我的第一个功能模块