数据写入_帮助文档_Thinkphp手册

来自AI助手的总结
ThinkPHP的add方法用于数据写入,支持连贯操作和字段过滤,可配合data、field等方法使用,同时提供Mysql特殊操作如批量插入和替换功能。

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

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

或者使用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注释 字符串
字段过滤

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

$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'] = 'thinkphp';
$data['email'] = 'thinkphp@gmail.com';
$User = M('User');
$User->data($data)->filter('strip_tags')->add();

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

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

Mysql的特殊操作

如果是mysql数据库的话,系统还提供了针对Mysql的操作方法,包括批量插入数据和替换操作,如:

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

同时在数据插入时允许更新操作:

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

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

温馨提示: 本文最后更新于2025-03-02 00:07:16,某些文章具有时效性,若有错误或已失效,请在下方 留言或联系 蚂蚁官方
© 版权声明
THE END
喜欢就支持一下吧
点赞12赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容