thinkphp 数据写入
ThinkPHP的数据写入操作使用add方法,使用示例如下:
$User = M("User"); // 实例化User对象$data['name'] = 'ThinkPHP';$data['email'] = 'ThinkPHP@gmail.com';$User->add($data);
如果是Mysql数据库的话,还可以支持在数据插入时允许更新操作:
add($data='',$options=array(),$replace=false)
其中add方法增加$replace参数(是否添加数据时允许覆盖),true表示覆盖,默认为false
或者使用data方法连贯操作
$User = M("User"); // 实例化User对象$User->data($data)->add();
如果在add之前已经创建数据对象的话(例如使用了create或者data方法),add方法就不需要再传入数据了。 使用create方法的例子:
$User = M("User"); // 实例化User对象// 根据表单提交的POST数据创建数据对象if($User->create()){$result = $User->add(); // 写入数据到数据库if($result){// 如果主键是自动增长型 成功后返回值就是最新插入的值$insertId = $result;}}
create方法并不算是连贯操作,因为其返回值可能是布尔值,所以必须要进行严格判断。
支持的连贯操作
在执行add方法之前,我们可以调用相关的连贯操作方法,配合完成数据写入操作。
写入操作支持的连贯操作方法包括:
| 连贯操作 | 作用 | 支持的参数类型 |
|---|---|---|
| table | 用于定义要操作的数据表名称 | 字符串和数组 |
| data | 用于指定要写入的数据对象 | 数组和对象 |
| field | 用于定义要写入的字段 | 字符串和数组 |
| relation | 用于关联查询(需要关联模型支持) | 字符串 |
| validate | 用于数据自动验证 | 数组 |
| auto | 用于数据自动完成 | 数组 |
| filter | 用于数据过滤 | 字符串 |
| scope | 用于命名范围 | 字符串、数组 |
| bind | 用于数据绑定操作 | 数组 |
| token | 用于令牌验证 | 布尔值 |
| comment | 用于SQL注释 | 字符串 |
| fetchSql | 不执行SQL而只是返回SQL | 布尔值 |
3.2.3版本开始,可以支持不执行SQL而只是返回SQL语句,例如:
$User = M("User"); // 实例化User对象$data['name'] = 'ThinkPHP';$data['email'] = 'ThinkPHP@gmail.com';$sql = $User->fetchSql(true)->add($data);echo $sql;// 输出结果类似于// INSERT INTO think_user (name,email) VALUES ('ThinkPHP','ThinkPHP@gmail.com')
字段过滤
如果写入了数据表中不存在的字段数据,则会被直接过滤,例如:
$data['name'] = 'thinkphp';$data['email'] = 'thinkphp@gmail.com';$data['test'] = 'test';$User = M('User');$User->data($data)->add();
其中test字段是不存在的,所以写入数据的时候会自动过滤掉。
在3.2.2版本以上,如果开启调试模式的话,则会抛出异常,提示:
非法数据对象:[test=>test]
如果在add方法之前调用field方法,则表示只允许写入指定的字段数据,其他非法字段将会被过滤,例如:
$data['name'] = 'thinkphp';$data['email'] = 'thinkphp@gmail.com';$data['test'] = 'test';$User = M('User');$User->field('name')->data($data)->add();
最终只有name字段的数据被允许写入,email和test字段直接被过滤了,哪怕email也是数据表中的合法字段。
字段内容过滤
通过filter方法可以对数据的值进行过滤处理,例如:
$data['name'] = '<b>thinkphp</b>';$data['email'] = 'thinkphp@gmail.com';$User = M('User');$User->data($data)->filter('strip_tags')->add();
写入数据库的时候会把name字段的值转化为thinkphp。
filter方法的参数是一个回调类型,支持函数或者闭包定义。
批量写入
在某些情况下可以支持数据的批量写入,例如:
// 批量添加数据$dataList[] = array('name'=>'thinkphp','email'=>'thinkphp@gamil.com');$dataList[] = array('name'=>'onethink','email'=>'onethink@gamil.com');$User->addAll($dataList);
该功能需要3.2.3以上版本,3.2.3以下版本仅对mysql数据库支持
thinkphp 数据写入的更多相关文章
- 将Oracle数据库中的数据写入Excel
将Oracle数据库中的数据写入Excel 1.准备工作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...
- JavaIO 将数据写入到文件中去
package com.Practice_FileWriter; import java.io.FileWriter; import java.io.IOException; public class ...
- 《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
先看一下我要实现的功能界面: 这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面 ...
- PHP如何通过SQL语句将数据写入MySQL数据库呢?
1,php和MySQL建立连接关系 2,打开 3,接受页面数据,PHP录入到指定的表中 1.2两步可直接使用一个数据库链接文件即可:conn.php <?phpmysql_connect(&qu ...
- 简单通过java的socket&serversocket以及多线程技术实现多客户端的数据的传输,并将数据写入hbase中
业务需求说明,由于公司数据中心处于刚开始部署的阶段,这需要涉及其它部分将数据全部汇总到数据中心,这实现的方式是同上传json文件,通过采用socket&serversocket实现传输. 其中 ...
- 学习springMVC框架配置遇到的问题-数据写入不进数据库时的处理办法
配置完了,运行,数据写入不到数据库中,就应该想UserAction 中的handleRequest()方法有没有进去,然后就设置断点.如果发现程序没有进去,就再想办法进去.
- 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...
- iOS中plist的创建,数据写入与读取
iOS中plist的创建,数据写入与读取 Documents:应用将数据存储在Documents中,但基于NSuserDefaults的首选项设置除外Library:基于NSUserDefaults的 ...
- java将数据写入到txt文件中(txt有固定的格式)
java将数据写入到txt文件中,这个应该对于学过java I/O的人来说是很简单的事情了,但是如果要将数据以固定的格式写入到txt文件中,就需要一定的技巧了. 这里举个简单的例子,以供参考: 比如我 ...
随机推荐
- CentOS增加swap分区大小
来自:http://www.centoscn.com/CentOS/Intermediate/2014/0222/2446.html 1. 查看当前分区情况 free -m 2. 增加 swap 大小 ...
- iOS开发系列-打印内存地址
打印内存地址 基本数据类型 定义一个基本数据类型,会根据变量类型分配对应的内存空间.比如定义一个int类型的变量a. int a = 10; 内存如下 输入变量a在内存中内存地址 NSLog(@&qu ...
- linq语句,常用的查询,模糊查询,实体查询
查询: //List是要查询的实体列表的集合 List.FindAll(n => n.NAME == NAME), //NAME变量是要查询的条件 模糊查询 List.FindAll(s ...
- redis通过命令传参以及主从复制
config set appendonly yes 临时生效 如果想永久生效的话,执行 config rewrite 并不是所有的都支持修改 config set bind ip 修改bind参 ...
- 安装keepalived 出现configure: error: Popt libraries is required
keepalived执行./configure --prefix=/usr/local/keepalived时报错:configure: error: Popt libraries is requir ...
- 8.0后广播在AndroidManifest.xml中注册后发送intent接收不到广播
8.0后广播在AndroidManifest.xml中注册后发送intent是接收不到广播了,看了一下原因,好像是8.0为了管理系统和节约电量特别针对广播和服务发送intent的方式启动做出的改变,也 ...
- CSS压缩
通过W3C 统一验证工具的检测没有错误后,为了提高加载速度和节约空间(相对来说,css量很少的情况下,几乎没啥区别),可以通过css压缩工具把css进行压缩. w3c css压缩 http://too ...
- hdu6607 min25筛+杜教筛+伯努利数求k次方前缀和
推导过程类似https://www.cnblogs.com/acjiumeng/p/9742073.html 前面部分min25筛,后面部分杜教筛,预处理min25筛需要伯努利数 //#pragma ...
- csp-s模拟9697题解
题面:https://www.cnblogs.com/Juve/articles/11790223.html 96: 刚一看以为是水题,直接等差数列求和就好了,然后发现模数不是质数,还要1e18*1e ...
- [CTSC2018]青蕈领主
[CTSC2018]青蕈领主 题解 首先,连续段要知道结论: 连续段要么不交,要么包含 所以是一棵树!每个位置的father是后面第一个包含它的 树形DP! 设dp[x],x为根的子树,(设管辖的区间 ...