直线电机优势

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. [转] boost undefined reference to 'pthread_create 问题

    由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个例子输入编译,结果出现如下错误:undefined reference to 'pthread_create'u ...

  2. 面向对象编程思想(OOP)总结

    本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞 ...

  3. Spark三种部署方式

  4. luaj使用 方法签名规则 Cocos2dxLuaJavaBridge

    function AndroidHandler:getParamJson()     local args = {nil}     local ok,ret = luaj.callStaticMeth ...

  5. C++ 系列:交换两个数字

    1. 创建中间变量 这是最快也是最简单的办法,例如: #include<stdio.h> int main(){ int a=10; int b=20; int temp; printf( ...

  6. 查看收到的邮件的来源ip以及包信息

    有时我们需要知道收到的邮件是从哪台服务器发送过来的,或者想知道该邮件的报文头是怎样的.以下以网易邮箱为例介绍如果抓取这些信息. 首先我们需要知道网易邮箱的访问服务器(拉协议),由于SMTP是推的协议, ...

  7. Eclipse注释快捷键、如何生成API以及可能遇到的问题解决

    1.Java注释方式单行注释// 快捷键:ctrl+/多行注释/* 快捷键:shift+ctrl+/*/文档注释/** 快捷键:shift+Alt+j */ 2.生成API文档 打开index.htm ...

  8. MySQL回滚到某一时刻数据的方法

    MySQL回滚到某一时刻数据的方法       对于有归档日志的数据库来说,原理上都具备全库回滚到之前某一时刻的能力.在这方面最好用的Orale数据库,使用Oracle数据库的RMAN工具,可以方便的 ...

  9. Java 多线程 - Volatile关键字

    作者: dreamcatcher-cx 出处: <http://www.cnblogs.com/chengxiao/> 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明 ...

  10. 使用WebStorm上传本地项目到GitHub和GitLab

    在使用 WebStorm 上传本地项目到 GitHub 之前,先要做一些相关配置. 首先打开 WebStorm ,依次点击File -> Settings… 打开系统设置面板,在上面搜索 git ...