数据库的操作(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降序排列:

控制器代码:

 <?php
//自适应模块的PC前端控制器
use wechat\hello\hello;
use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; !defined('IN_APP') && exit('Access Denied!'); switch($action)
{
case 'test':
//传统SQL写法
$data=MySql::fetchAll("SELECT * FROM ".DB_PRE."wechat_hello_article WHERE id>1 ORDER BY id DESC LIMIT 0,2");
print_r($data); //连贯操作
$article=M('wechat_hello_article');
$data=$article->where('id>1')->order('id','desc')->limit(2)->select();
print_r($data);
exit();
break;
case 'index':
//从数据表读取数据并赋给数组$data
//$data=Hello::dataList();
echo '这是自适应模块的PC端前端控制器';
exit();
break;
case 'detail':
$data=Hello::dataGet($id); //$id 可以改成$_GET['id']
break;
case 'tougao': break;
case 'tougaosave':
$info['pics']=deformat_focus_img('pics'); //多图上传的特殊处理,其他类型不需要 print_r($info);
exit(); /*
$op=Hello::dataInsert($info); if($op)
{
echo '文章投稿成功,ID为'.$op;
}
else
{
echo '文章投稿失败';
}
exit();
*/
break;
//以下 case 条件仅为 示例。您可以根据业务逻辑自由修改和拓展 //case 'index': //在此写 index.php?m=hello&a=index 时的逻辑 //break; //case 'list': //在此写 index.php?m=hello&a=list 时的逻辑 //break; //以此类推... //case '...': //在此写 index.php?m=hello&a=... 时的逻辑 //break; default:
break;
}
?>

效果:

如图,在控制器中,传统操作和连贯操作的效果是一样的,只是连贯操作给人感觉更简洁、更炫酷。

2、读取pw_wechat_hello_article ID为2的1条记录:

 <?php
//自适应模块的PC前端控制器
use wechat\hello\hello;
use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; !defined('IN_APP') && exit('Access Denied!'); switch($action)
{
case 'test':
//传统SQL写法
$data=MySql::fetchOne("SELECT * FROM ".DB_PRE."wechat_hello_article WHERE id=5");
print_r($data); //连贯查询
$article=M('wechat_hello_article');
$data=$article->where('id=5')->find();
print_r($data);
exit();
break;
case 'index':
//从数据表读取数据并赋给数组$data
//$data=Hello::dataList();
echo '这是自适应模块的PC端前端控制器';
exit();
break;
case 'detail':
$data=Hello::dataGet($id); //$id 可以改成$_GET['id']
break;
case 'tougao': break;
case 'tougaosave':
$info['pics']=deformat_focus_img('pics'); //多图上传的特殊处理,其他类型不需要 print_r($info);
exit(); /*
$op=Hello::dataInsert($info); if($op)
{
echo '文章投稿成功,ID为'.$op;
}
else
{
echo '文章投稿失败';
}
exit();
*/
break;
//以下 case 条件仅为 示例。您可以根据业务逻辑自由修改和拓展 //case 'index': //在此写 index.php?m=hello&a=index 时的逻辑 //break; //case 'list': //在此写 index.php?m=hello&a=list 时的逻辑 //break; //以此类推... //case '...': //在此写 index.php?m=hello&a=... 时的逻辑 //break; default:
break;
}
?>

效果:

小贴士:

传统操作的MySql::fetchAll()方法等同于连贯操作的select()方法,他们都返回一个由结果集组成的二维数组。

传统操作的MySql::fetchOne()方法等同于连贯操作的find()方法,他们都返回一个指定结果的一维数组。

三、Create——数据库写操作的传统操作和连贯操作示例

向数据库插入一条记录。

 <?php
//自适应模块的PC前端控制器
use wechat\hello\hello;
use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; !defined('IN_APP') && exit('Access Denied!'); switch($action)
{
case 'test':
$info=array();
$info['title']='要插入的标题';
$info['content']='要插入的内容'; //传统SQL写法
$insert_id=MySql::insert(DB_PRE."wechat_hello_article",$info);
echo('插入的ID'.$insert_id); //连贯查询
$article=M('wechat_hello_article');
$insert_id=$article->add($info); //或者 $data=$article->data($info)->add();
echo('插入的ID'.$insert_id);
exit();
break;
case 'index':
//从数据表读取数据并赋给数组$data
//$data=Hello::dataList();
echo '这是自适应模块的PC端前端控制器';
exit();
break;
case 'detail':
$data=Hello::dataGet($id); //$id 可以改成$_GET['id']
break;
case 'tougao': break;
case 'tougaosave':
$info['pics']=deformat_focus_img('pics'); //多图上传的特殊处理,其他类型不需要 print_r($info);
exit(); /*
$op=Hello::dataInsert($info); if($op)
{
echo '文章投稿成功,ID为'.$op;
}
else
{
echo '文章投稿失败';
}
exit();
*/
break;
//以下 case 条件仅为 示例。您可以根据业务逻辑自由修改和拓展 //case 'index': //在此写 index.php?m=hello&a=index 时的逻辑 //break; //case 'list': //在此写 index.php?m=hello&a=list 时的逻辑 //break; //以此类推... //case '...': //在此写 index.php?m=hello&a=... 时的逻辑 //break; default:
break;
}
?>

效果:

小贴士:
传统操作的MySql::insert()方法等同于连贯操作的add()方法,成功插入时,他们都返回插入的记录ID,失败时,返回FALSE。

四、Update——数据库更新操作的传统操作和连贯操作示例

更新ID为11的文章标题为“我是新标题”。

 <?php
//自适应模块的PC前端控制器
use wechat\hello\hello;
use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; !defined('IN_APP') && exit('Access Denied!'); switch($action)
{
case 'test':
$info=array();
$info['title']='我是新标题'; //传统SQL写法
MySql::update(DB_PRE."wechat_hello_article",$info,'id=11'); //连贯查询
$article=M('wechat_hello_article');
$article->where('id=11')->data($info)->save(); //或者 $data=$article->save($info); exit();
break;
case 'index':
//从数据表读取数据并赋给数组$data
//$data=Hello::dataList();
echo '这是自适应模块的PC端前端控制器';
exit();
break;
case 'detail':
$data=Hello::dataGet($id); //$id 可以改成$_GET['id']
break;
case 'tougao': break;
case 'tougaosave':
$info['pics']=deformat_focus_img('pics'); //多图上传的特殊处理,其他类型不需要 print_r($info);
exit(); /*
$op=Hello::dataInsert($info); if($op)
{
echo '文章投稿成功,ID为'.$op;
}
else
{
echo '文章投稿失败';
}
exit();
*/
break;
//以下 case 条件仅为 示例。您可以根据业务逻辑自由修改和拓展 //case 'index': //在此写 index.php?m=hello&a=index 时的逻辑 //break; //case 'list': //在此写 index.php?m=hello&a=list 时的逻辑 //break; //以此类推... //case '...': //在此写 index.php?m=hello&a=... 时的逻辑 //break; default:
break;
}
?>

效果:

小贴士:
传统操作的MySql::update()方法等同于连贯操作的save()方法,用于记录更新。

五、Delete——数据库删除操作的传统操作和连贯操作示例

删除ID为11的文章。

 <?php
//自适应模块的PC前端控制器
use wechat\hello\hello;
use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; !defined('IN_APP') && exit('Access Denied!'); switch($action)
{
case 'test':
//传统SQL写法
MySql::mysqlDelete(DB_PRE."wechat_hello_article",11,'id'); //连贯查询
$article=M('wechat_hello_article');
$article->where('id=11')->delete(); exit();
break;
case 'index':
//从数据表读取数据并赋给数组$data
//$data=Hello::dataList();
echo '这是自适应模块的PC端前端控制器';
exit();
break;
case 'detail':
$data=Hello::dataGet($id); //$id 可以改成$_GET['id']
break;
case 'tougao': break;
case 'tougaosave':
$info['pics']=deformat_focus_img('pics'); //多图上传的特殊处理,其他类型不需要 print_r($info);
exit(); /*
$op=Hello::dataInsert($info); if($op)
{
echo '文章投稿成功,ID为'.$op;
}
else
{
echo '文章投稿失败';
}
exit();
*/
break;
//以下 case 条件仅为 示例。您可以根据业务逻辑自由修改和拓展 //case 'index': //在此写 index.php?m=hello&a=index 时的逻辑 //break; //case 'list': //在此写 index.php?m=hello&a=list 时的逻辑 //break; //以此类推... //case '...': //在此写 index.php?m=hello&a=... 时的逻辑 //break; default:
break;
}
?>

效果:

小贴士:
传统操作的MySql::mysqlDelete()方法等同于连贯操作的delete()方法,用于删除记录。但是连贯操作更简洁易懂。

总结:在1.1.3+版本的phpWeChat中已兼容支持这两种MySql数据库操作方案,您可以根据自己的喜好来定夺采取何种方式。

《10天学会phpWeChat》系列教程传送门:

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

  1. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  2. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  3. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  4. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  5. ADO.NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...

  6. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  7. 【转】Android 增,删,改,查 通讯录中的联系人

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

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

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

  9. python基础中的四大天王-增-删-改-查

    列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...

随机推荐

  1. 初识Jmeter(一)

    倒霉熊的推荐: 文本学习网址:http://m.open-open.com/m/doc/category/105 视频学习网址: 软件学习网:http://www.ask3.cn/index.html ...

  2. Android真机连接手机Target显示unknown cmd命令下adb devices 显示offline

    主要原因是adb版本的问题: 1.找到adb.exe路径  比如:G:\BaiduYunDownload\Android\android-sdk\platform-tools,将该路径放到环境便利-- ...

  3. android 5.1 API简介

    android 5.1介绍: http://developer.android.com/about/versions/android-5.1.html?utm_campaign=lollipop-51 ...

  4. ViewPager+Fragment,Fragment会预加载的问题

    http://www.bubuko.com/infodetail-535920.html 在Fragmetn里,onCreateView去加载布局,真正的加载数据通过这个方法setUserVisibl ...

  5. linux文件分割(将大的日志文件分割成小的)【转载】

    linux文件分割(将大的日志文件分割成小的)linux下文件分割可以通过split命令来实现,可以指定按行数分割和安大小分割两种模式.Linux下文件合并可以通过cat命令来实现,非常简单. 在Li ...

  6. springframwork历史版本下载地址

    http://sourceforge.net/projects/springframework/files/springframework-2/

  7. cap

    http://blog.javachen.com/2014/05/30/note-about-brewers-cap-theorem.html

  8. CATranstion动画

    // 1.创建过度动画 CATransition *anima = [CATransition animation]; // 2.设置动画类型 anima.type = @"cube&quo ...

  9. linux下sed命令对文件执行文本替换

    让我们看一下 sed 最有用的命令之一,替换命令.使用该命令,可以将特定字符串或匹配的规则表达式用另一个字符串替换.下面是该命令最基本用法的示例: $ sed -e ‘s/foo/bar/’ myfi ...

  10. Android--->activity高级运用,保存前一个界面为完成的数据savedInstanceState。

    main.xml布局代码分析 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...