ThinkPHP3.2.3在执行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方法的参数是一个回调类型,支持函数或者闭包定义。