当前位置:K88软件开发文章中心网站服务器框架ThinkPHP → 文章内容

数据写入

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-26 15:33:02

由 AdairSweet 创建, 最后一次修改 2016-02-24 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布尔值可以支持不执行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数据库支持

数据写入