DTapi教程:27.数据库操作之 添加数据
insert() 方法
insert()方法大大简化了destoon系统的数据插入方式
insert(参数一,参数二),共两个参数:
参数一:插入的数据,数组类型,可以是一维或二维数组,必填参数
参数二:是否使用replace方式,非必填参数,使用参数二时,参数一只能传一维数组,参数二为布尔型值,可使用:0,1 或者 true,false
单表单条信息插入
向表中插入一条信息,传一维数组,key必须与数据库中字段对应,否则会报错。
示例
$data = ['title'=>'www.dtmoban.com','username'=>'gaofei']; Db::table('test')->insert($data);
单表多条信息插入
向表中插入多条信息,传二维数组,key必须与数据库中字段对应,否则会报错。
示例
$data = [ ['title'=>'www.dtmoban.com','username'=>'gaofei'], ['title'=>'www.dtmoban.com','username'=>'gaofei2'], ['title'=>'www.dtmoban.com','username'=>'gaofei3'], ['title'=>'www.dtmoban.com','username'=>'gaofei4'] ]; Db::table('test')->insert($data);
replace方式插入数据
传第二个可选参数即可
示例:
$data = ['title'=>'www.dtmoban.com','username'=>'gaofei']; Db::table('test')->insert($data,true);
注意:只能使用一维数组,单条插入。
content() 方法
这是一个辅助方法,可选。
用于向主表插入一条信息时,返回主表主健id,然后向主表关联的副表插入一条或多条信息,并且自带事务功能,如果副表插入失败,则删除主表信息。 这不是真正的事务,只是模拟的事务功能。
共四个参数: content(表名,关联字段,数据,范围,replace模式)
replace模式时只能插入单条数据,并且关联字段得是副本的主健
示例:
//向主表插入一条数据,并且向副表插入一条 $data = ['title'=>'www.dtmoban.com','username'=>'gaofei']; $content_data['content'] = "fdddddd"; Db::table('test')->content('test_data','itemid',$content_data,'content',true)->insert($data); //向主表插入一条数据,并且同副表插入多条数据 //如果副表多插失败或者插入条数不符合,则撤回整个操作 $data['name'] = '小品02'; $data['number'] = 1002; $content_data[] = ['title'=>'5454545','price'=>'100']; $content_data[] = ['title'=>'5454545','price'=>'100']; $content_data[] = ['title'=>'5454545','price'=>'100']; $content_data[] = ['title'=>'5454545','price'=>'100']; $content_data[] = ['title'=>'5454545','price'=>'100']; $content_data[] = ['title'=>'5454545','price'=>'100']; Db::table('test')->content('test_product','tid',$content_data,'title,price')->insert($data);
field()方法
用来限制插入的字段,安全性更高,一般用于数据是前台提交过来的情况,防止恶意住表中关健字段插非法信息。
示例:
$data = [ ['name'=>'标题01','number'=>10], ['name'=>'标题02','number'=>11], ['name'=>'标题03','number'=>12], ['name'=>'标题04','number'=>13], ['name'=>'标题05','number'=>14] ]; //单表批量插入,不支持副表同插 Db::table('test')->field('name,number')->insert($data);
除了 name和number字段外,如果$data中还有其它字段就会被自动过忽略掉。
isertAll()方法
用于向数据库同时插入多条信息,和insert()方法传二维数组时效果是一样的。
示例:
$data = [ ['name'=>'标题01','number'=>10], ['name'=>'标题02','number'=>11], ['name'=>'标题03','number'=>12], ['name'=>'标题04','number'=>13], ['name'=>'标题05','number'=>14] ]; //单表批量插入,不支持副表同插 Db::table('test')->field('name,number')->insertAll($data);
debug() 方法
用于打印插入sql语句,多条数据插入时,只会返回第一条数据的sql