直线电机优势

ThinkPHP的数据写入操作使用add方法,使用示例如下:

  1. $User = M("User"); // 实例化User对象
  2. $data['name'] = 'ThinkPHP';
  3. $data['email'] = 'ThinkPHP@gmail.com';
  4. $User->add($data);

如果是Mysql数据库的话,还可以支持在数据插入时允许更新操作:

  1. add($data='',$options=array(),$replace=false)

其中add方法增加$replace参数(是否添加数据时允许覆盖),true表示覆盖,默认为false

或者使用data方法连贯操作

  1. $User = M("User"); // 实例化User对象
  2. $User->data($data)->add();

如果在add之前已经创建数据对象的话(例如使用了create或者data方法),add方法就不需要再传入数据了。 使用create方法的例子:

  1. $User = M("User"); // 实例化User对象
  2. // 根据表单提交的POST数据创建数据对象
  3. if($User->create()){
  4. $result = $User->add(); // 写入数据到数据库
  5. if($result){
  6. // 如果主键是自动增长型 成功后返回值就是最新插入的值
  7. $insertId = $result;
  8. }
  9. }

create方法并不算是连贯操作,因为其返回值可能是布尔值,所以必须要进行严格判断。

支持的连贯操作

在执行add方法之前,我们可以调用相关的连贯操作方法,配合完成数据写入操作。

写入操作支持的连贯操作方法包括:

连贯操作 作用 支持的参数类型
table 用于定义要操作的数据表名称 字符串和数组
data 用于指定要写入的数据对象 数组和对象
field 用于定义要写入的字段 字符串和数组
relation 用于关联查询(需要关联模型支持) 字符串
validate 用于数据自动验证 数组
auto 用于数据自动完成 数组
filter 用于数据过滤 字符串
scope 用于命名范围 字符串、数组
bind 用于数据绑定操作 数组
token 用于令牌验证 布尔值
comment 用于SQL注释 字符串
fetchSql 不执行SQL而只是返回SQL 布尔值

3.2.3版本开始,可以支持不执行SQL而只是返回SQL语句,例如:

  1. $User = M("User"); // 实例化User对象
  2. $data['name'] = 'ThinkPHP';
  3. $data['email'] = 'ThinkPHP@gmail.com';
  4. $sql = $User->fetchSql(true)->add($data);
  5. echo $sql;
  6. // 输出结果类似于
  7. // INSERT INTO think_user (name,email) VALUES ('ThinkPHP','ThinkPHP@gmail.com')
字段过滤

如果写入了数据表中不存在的字段数据,则会被直接过滤,例如:

  1. $data['name'] = 'thinkphp';
  2. $data['email'] = 'thinkphp@gmail.com';
  3. $data['test'] = 'test';
  4. $User = M('User');
  5. $User->data($data)->add();

其中test字段是不存在的,所以写入数据的时候会自动过滤掉。

在3.2.2版本以上,如果开启调试模式的话,则会抛出异常,提示:非法数据对象:[test=>test]

如果在add方法之前调用field方法,则表示只允许写入指定的字段数据,其他非法字段将会被过滤,例如:

  1. $data['name'] = 'thinkphp';
  2. $data['email'] = 'thinkphp@gmail.com';
  3. $data['test'] = 'test';
  4. $User = M('User');
  5. $User->field('name')->data($data)->add();

最终只有name字段的数据被允许写入,email和test字段直接被过滤了,哪怕email也是数据表中的合法字段。

字段内容过滤

通过filter方法可以对数据的值进行过滤处理,例如:

  1. $data['name'] = '<b>thinkphp</b>';
  2. $data['email'] = 'thinkphp@gmail.com';
  3. $User = M('User');
  4. $User->data($data)->filter('strip_tags')->add();

写入数据库的时候会把name字段的值转化为thinkphp

filter方法的参数是一个回调类型,支持函数或者闭包定义。

批量写入

在某些情况下可以支持数据的批量写入,例如:

  1. // 批量添加数据
  2. $dataList[] = array('name'=>'thinkphp','email'=>'thinkphp@gamil.com');
  3. $dataList[] = array('name'=>'onethink','email'=>'onethink@gamil.com');
  4. $User->addAll($dataList);

该功能需要3.2.3以上版本,3.2.3以下版本仅对mysql数据库支持

thinkphp 数据写入的更多相关文章

  1. 将Oracle数据库中的数据写入Excel

    将Oracle数据库中的数据写入Excel 1.准备工作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...

  2. JavaIO 将数据写入到文件中去

    package com.Practice_FileWriter; import java.io.FileWriter; import java.io.IOException; public class ...

  3. 《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

      先看一下我要实现的功能界面:   这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面 ...

  4. PHP如何通过SQL语句将数据写入MySQL数据库呢?

    1,php和MySQL建立连接关系 2,打开 3,接受页面数据,PHP录入到指定的表中 1.2两步可直接使用一个数据库链接文件即可:conn.php <?phpmysql_connect(&qu ...

  5. 简单通过java的socket&serversocket以及多线程技术实现多客户端的数据的传输,并将数据写入hbase中

    业务需求说明,由于公司数据中心处于刚开始部署的阶段,这需要涉及其它部分将数据全部汇总到数据中心,这实现的方式是同上传json文件,通过采用socket&serversocket实现传输. 其中 ...

  6. 学习springMVC框架配置遇到的问题-数据写入不进数据库时的处理办法

    配置完了,运行,数据写入不到数据库中,就应该想UserAction 中的handleRequest()方法有没有进去,然后就设置断点.如果发现程序没有进去,就再想办法进去.

  7. 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

    摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...

  8. iOS中plist的创建,数据写入与读取

    iOS中plist的创建,数据写入与读取 Documents:应用将数据存储在Documents中,但基于NSuserDefaults的首选项设置除外Library:基于NSUserDefaults的 ...

  9. java将数据写入到txt文件中(txt有固定的格式)

    java将数据写入到txt文件中,这个应该对于学过java I/O的人来说是很简单的事情了,但是如果要将数据以固定的格式写入到txt文件中,就需要一定的技巧了. 这里举个简单的例子,以供参考: 比如我 ...

随机推荐

  1. Delphi中文件名函数-路径、名称、子目录、驱动器、扩展名

    文件名函数 文件名函数可以对文件的名称.所在子目录.驱动器和扩展名等进行操作.下表列出这些函数及其功能. 函数说明 ExpandFileName() //返回文件的全路径(含驱动器.路径) Extra ...

  2. JAVA IntelliJ IDEA for mac/jdk的安装及环境配置、运行

    现在配置完之后再回头看看,其实挺简单, 但我还是弄了好几个小时才配置出来, 不过好在是自己配置出来的, 每天都在慢慢进步. 安装及配置步骤如下: JAVA的IDE的话去jetbrains的官网上对应下 ...

  3. postgresql-创建主键自增的表

    之前一直用的mysql,这个也基本上是主流,主键自增是很多建表规范中的硬性要求,不过这两种数据库主键自增的区别还是很大的 通常navicat中对mysql 主键自增直接客户端指定即可,不过对PG貌似不 ...

  4. 文本数据增量导入到mysql

    实现思路:       实现Java读取TXT文件中的内容并存到内存,将内存中的数据和mysql 数据库里面某张表数据的字段做一个比较,如果比较内存中的数据在mysql 里存在则不做处理,如果不存在则 ...

  5. NEO4J亿级数据全文索引构建优化

    NEO4J亿级数据全文索引构建优化 一.数据量规模(亿级) 二.构建索引的方式 三.构建索引发生的异常 四.全文索引代码优化 1.Java.lang.OutOfMemoryError 2.访问数据库时 ...

  6. D3.js比例尺 定量比例尺 之 线性比例尺(v3版本)

    定量比例尺 : 数学上有函数的概念,不是编程中所说的函数,如线性函数.指数函数.对数函数等,而指的是一个量随着另一个量的变化而变化.例如有一下线性函数 : y=2x+1该函数在二维坐标系中绘制出来的图 ...

  7. python中logging使用方法

    1.logging提供了一组便利的函数,用来做简单的日志.它们是 debug(). info(). warning(). error() 和 critical(). 1.1logging以严重程度递增 ...

  8. The linux command 之存储媒介

    一.常用的命令 mount:挂载文件系统 unmount:卸载文件系统 fdisk:硬盘分区命令 fdformat:格式化软盘 fsck:检查和修复文件系统 mkfs:创建文件系统 dd:转换和拷贝一 ...

  9. Java动态代理与CGLib

    Java帝国之动态代理 CGLib:从兄弟到父子-动态代理在民间是怎么玩的? 以上两篇文章引用自微信公众号: 码农翻身 Java动态代理 深度详解 以上文章引用博客园:陈树义

  10. 06.Mybatis关联查询

    1.一对一关联查询 需求:查询出每条orders记录和其关联的user信息 在orders实体类中添加属性与set.get方法 /** * 测试1对1关联查询 */ private User user ...