ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 数据写入 ThinkPHP的数据写入操作使用add方法,使用示例如下: ```php $User = M("User"); // 实例化User对象 $data['name'] = 'ThinkPHP'; $data['email'] = 'ThinkPHP@gmail.com'; $User->add($data); ``` 如果是Mysql数据库的话,还可以支持在数据插入时允许更新操作: ```php add($data='',$options=array(),$replace=false) ``` 其中add方法增加$replace参数(是否添加数据时允许覆盖),true表示覆盖,默认为false 或者使用data方法连贯操作 ```php $User = M("User"); // 实例化User对象 $User->data($data)->add(); ``` 如果在add之前已经创建数据对象的话(例如使用了create或者data方法),add方法就不需要再传入数据了。 使用create方法的例子: ```php $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语句,例如: ```php $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') ``` ### 字段过滤 如果写入了数据表中不存在的字段数据,则会被直接过滤,例如: ```php $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方法,则表示只允许写入指定的字段数据,其他非法字段将会被过滤,例如: ```php $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方法可以对数据的值进行过滤处理,例如: ```php $data['name'] = '<b>thinkphp</b>'; $data['email'] = 'thinkphp@gmail.com'; $User = M('User'); $User->data($data)->filter('strip_tags')->add(); ``` 写入数据库的时候会把name字段的值转化为thinkphp。 filter方法的参数是一个回调类型,支持函数或者闭包定义。 ### 批量写入 在某些情况下可以支持数据的批量写入,例如: ```php // 批量添加数据 $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数据库支持