【三十四】thinkphp之curd操作
1.数据创建(create)
接受提交过来的数据,比如表单提交的 POST(默认)数据。接受到数据后,还可以对数据进行有效的验证、完成、生成等工作
// 这里 create()方法就是数据创建,数据的结果就是提交的 POST 数据的键值对。
// 特别注意的是:提交过来的字段和数据表字段是对应的,否则无法解析
//根据表单提交的POST数据,创建数据
var_dump($user->create());
通过$_post接收数据
//通过数组手工获取数据,覆盖提交的
$data['name']='qqq';
$data['password']="456";
$data['email']="qqq@qq.com";
$data['age']=52;
var_dump($user->create($data));
//通过对象手工获取数据,覆盖提交的
$data=new \stdClass();
$data->name=$_POST['name'];
$data->password=$_POST['password'];
$data->email=$_POST['email'];
$data->age=$_POST['age'];
var_dump($user->create($data));
// 默认是$_POST,传递$_GET修改
var_dump($user->create($_GET));
create()方法可以传递第二个参数,将要操作的模式,有两种:Model::MODEL_INSER和 Model::MODEL _UPDATE,即新增和修改。当没有指定的时候,系统会根据数据源是否包含主键来自动判断,如果包含主键,则就是修改
操作
// 设置将要新增操作
var_dump($user->create($_POST,Model::MODEL_INSERT));

//限制可操作的字段
// 提交过来的数据只会接收name字段的值
var_dump($user->field('name')->create());
2.数据写入(add)
数据写入使用的是 add()方法。
//新增一条数据
// sql:INSERT INTO `user1` (`name`,`password`,`email`,`age`) VALUES ('caiminfang','123','caiminfang@qq.com',15)
$user=M('user1');
$data['name']='caiminfang';
$data['password']="123";
$data['email']="caiminfang@qq.com";
$data['age']=15;
$user->add($data);
// 结合create()方法
// INSERT INTO `user1` (`name`,`password`,`email`,`age`) VALUES ('cmfcmf','456','cmf@qq.com',18)
$data $user->create();
$data['name']=$_POST['name'];
$data['password']=$_POST['password'];
$data['email']=$_POST['email'];
$data['age']=$_POST['age'];
$user->add($data);

//INSERT INTO `user1` (`name`) VALUES ('asdasd')
//使用data连贯操作
$user=M('user1');
$data=$user->create();
$data['name']='asdasd';
var_dump($user->data($data)->add());
// data连贯方法,支持字符串、数组、对象
// INSERT INTO `user1` (`name`,`password`,`email`,`age`) VALUES ('xingshi','123','xingshi@qq.com',55)
$data='name=xingshi&password=123&email=xingshi@qq.com&age=55';
$user->data($data)->add();
3.数据读取(select)
支持连贯方法的有:http://www.cnblogs.com/8013-cmf/p/8317720.html(请阅读此篇文章)
field和getField的区别:
- field():用于定义要查询的字段
- getField():用于查询某个字段的值
$user=M('user1');
//显示所有数据
// SELECT * FROM `user1`
var_dump($user->select());
//显示默认第一条数据
// SELECT * FROM `user1` LIMIT 1
var_dump($user->find());
// 获取第一条name字段的值
// SELECT `name` FROM `user1` LIMIT 1
var_dump($user->getField('name'));
// 获取所有user字段的name值
// SELECT `name` FROM `user1`
var_dump($user->getField('name',true));
//获取所有user的name值和email值
// SELECT `name`,`email` FROM `user1`
var_dump($user->getField('name,email'));
//以冒号分隔
// SELECT `name`,`email`,`age` FROM `user1`
var_dump($user->getField('name,email,age',":"));
//限制2条数据
//SELECT `name`,`email` FROM `user1` LIMIT 2
var_dump($user->getField('name,email',2));
4.数据更新(save)
主要是对数据的修改操作。
$user=M('user1');
//修改数据
// UPDATE `user1` SET `name`='zxczxc' WHERE `id` = 4
$data['name']="zxczxc";
$map['id']=4;
$user->where($map)->save($data);
//默认主键为条件
// UPDATE `user1` SET `name`='hello' WHERE `id` = 3
$data['id']=3;
$data['name']="hello";
$user->save($data);

结合create使用save
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form method="post" action="http://localhost/basic_thinkphp/index.php/Home/Model/save">
<!-- 必须要定义id的默认值 -->
<input type="hidden" name="id" value="3">
用户名:<input type="text" name="name"><br/>
密码:<input type="text" name="password"><br/>
邮箱:<input type="text" name="email"><br/>
年龄:<input type="text" name="age"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
ModelController.class.php
<?php
namespace Home\Controller;
use Think\Controller;
use Think\Model;
use Think\stdClass;
class ModelController extends Controller {
public function save(){
$user=M('user1');
// 结合create
// UPDATE `user1` SET `name`='test1',`password`='456',`email`='a@qq.com',`age`=88 WHERE `id` = 3
$user->create(); //post必须包含主键,我是在前端定义的
$user->save();
}
}
$user=M('user1');
// 修改某一个值
// UPDATE `user1` SET `name`='labixiaoxin' WHERE `id` = 3
$map['id']=3;
$user->where($map)->setField('name','labixiaoxin');
//统计累计,累加累减
// UPDATE `user1` SET `age`=age+1 WHERE `id` = 3
$map['id']=3;
$user->where($map)->setInc('age',1);
5.数据删除(delete)
$user=M('user1');
// 直接删除主键(id=8)
// DELETE FROM `user1` WHERE `id` = 8
$user->delete(8);
//根据id删除
// DELETE FROM `user1` WHERE `id` = 47
$map['id']=47;
$user->where($map)->delete();
//批量删除多个
// DELETE FROM `user1` WHERE `id` IN ('45','46')
$user->delete("45,46");
//删除年龄为16且按照id倒序的前2个
// DELETE FROM `user1` WHERE `age` = 16 ORDER BY `id` DESC LIMIT 2
$map['age']=16;
$user->where($map)->order(array('id'=>'DESC'))->limit(2)->delete();
// 删除所有数据
echo $user->where('1')->delete();

6.ActiveReocrd 模式
这种模式最大的特别就是简化了 CURD 的操作,并且采用对象化的操作方式,便于使用和理解。
// 添加一条数据
$user = M('User');
$user->user = '火影忍者';
$user->email = 'huoyin@qq.com';
$user->date = date('Y-m-d H:i:s');
$user->add(); //结合create
$user = M('User');
$user->create();
$user->date = date('Y-m-d H:i:s');
$user->add(); //找到主键为4的值
$user = M('User');
var_dump($user->find(4)) //查找user=蜡笔小新的记录
$user = M('User');
var_dump($user->getByUser('蜡笔小新')); //输出userecho
$user->user;
//通过主键查询多个
$user = M('User');
var_dump($user->select('1,2,3'));
//修改一条数据
$user = M('User');
$user->find(1);
$user->user = '蜡笔老新';
$user->save(); //删除当前找到的数据
$user = M('User');
$user->find(11);
$user->delete(); //删除主键为10的数据
$user = M('User');
$user->delete(10); //删除主键为10,11的数据
$user = M('User');
$user->delete('10,11'
【三十四】thinkphp之curd操作的更多相关文章
- Java第三十四天,IO操作(续集),非基本对象的读写——序列化流
一.序列化与反序列化 以前在对文件的操作过程当中,读写的对象都是最基本的数据类型,即非引用数据类型.那么如果我们对饮用数据类型(即对象类型)数据进行读写时,应该如何做呢?这就用到了序列化与反序列化. ...
- 《手把手教你》系列技巧篇(三十四)-java+ selenium自动化测试-单选和多选按钮操作-中篇(详解教程)
1.简介 今天这一篇宏哥主要是讲解一下,如何使用list容器来遍历单选按钮.大致两部分内容:一部分是宏哥在本地弄的一个小demo,另一部分,宏哥是利用JQueryUI网站里的单选按钮进行实战. 2.d ...
- JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫
JAVA之旅(三十四)--自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫 我们接着来说网络编程,TCP 一.自定义服务端 我们直接写一个服务端,让本机去连接 ...
- spring boot 常见三十四问
Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ...
- 孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习
孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.close() 当一个file对象执行此方法时,将关闭当前 ...
- FreeSql (三十四)CodeFirst 迁移说明
FreeSql 支持 CodeFirst 迁移结构至数据库,这应该是(O/RM)必须标配的一个功能. 与其他(O/RM)不同FreeSql支持更多的数据库特性,而不只是支持基础的数据类型,这既是优点也 ...
- 风炫安全web安全学习第三十四节课 文件包含漏洞防御
风炫安全web安全学习第三十四节课 文件包含漏洞防御 文件包含防御 在功能设计上不要把文件包含的对应文件放到前台去操作 过滤各种../,https://, http:// 配置php.ini文件 al ...
- COJ966 WZJ的数据结构(负三十四)
WZJ的数据结构(负三十四) 难度级别:C: 运行时间限制:20000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给一棵n个节点的树,请对于形如"u ...
- NeHe OpenGL教程 第三十四课:地形
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Java进阶(三十四)Integer与int的种种比较你知道多少?
Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值 ...
随机推荐
- Symfony2 学习笔记之服务容器
现在的PHP应用程序都是面向对象开发,所以主要是由对象构成.有的对象可以方便的分发邮件信息而有的可能帮你把信息写入到数据库中.在你的应用程序中,你可能创建一个对象用于管理你的产品库存,或者另外一个对象 ...
- 运行tomcat报Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]"
解决方法1: 手动设置MaxPermSize大小,如果是linux系统,修改TOMCAT_HOME/bin/catalina.sh,如果是windows系统,修改TOMCAT_HOME/bin/c ...
- SQL Server 2008 R2 常用系统函数学习
/******************************************* * 聚合函数 *******************************************/ SEL ...
- 一线互联网常见的 14 个 Java 面试题,你颤抖了吗程序员
跳槽不算频繁,但参加过不少面试(电话面试.face to face 面试),面过大 / 小公司.互联网 / 传统软件公司,面糊过(眼高手低,缺乏实战经验,挂掉),也面过人,所幸未因失败而气馁,在此过程 ...
- 【linux应用】将一个大文件按行拆分成小文件
例如将一个BLM.txt文件分成前缀为 BLM_ 的1000个小文件,后缀为系数形式,且后缀为4位数字形式 先利用 wc -l BLM.txt #读出BLM.txt有多少行. 再利用 split 命令 ...
- jsoi2018 R1R2
Jsoi2018 R1: D1:T1:签到题,状压dp,(思考:讲题人说可以卡一卡空间,怎么做?) T2:50pts:贪心,因为无重复 100pts:线段树合并? T3:25pts 树形dp D1:T ...
- mysql 通过查看mysql 配置参数、状态来优化你的mysql
我把MYISAM改成了INNODB,数据库对CPU方面的占用变小很多' mysql的监控方法大致分为两类: 1.连接到mysql数据库内部,使用show status,show variables,f ...
- php yii2 使用命令行模式开启脚本 报错 :Error while sending QUERY packet. PID=xxx
背景:使用Yii2命令行模式开启脚本监控rabbitmq队列(或使用nohup &命令后台监控接口),当队列有订单信息,执行查询,更新操作(相当于PHP文件写个查询,更新,使用命令行启动) 问 ...
- Vue中的事件与常见的问题处理
Vue的事件:获取事件对象$event: 事件冒泡:事件会向上传播 原生js阻止事件冒泡,需要先获取事件对象,再调用stopPropagation()方法: vue事件修饰符stop,例@clik.s ...
- JavaScript实现表单验证_02
注册3次错误,最终的结果: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...