数据插入insert($data,$table,$type)
insert方法可以插入单条数据,也可以插入多条数据, 成功返回为最后一条主键id号,失败返回空
$data要插入的数据,$table可以指定表,$type插入类型有INSERT
, INSERT IGNORE
, INSERT OR IGNORE
, REPLACE
, DUPLICATE
单条数据插入
$db->table('products')->insert([
'name' => 'Apple Iphone X 128 Gb',
'code' => 'APPLEX128',
'price' => '999.9'
]);
多条数据插入
$db->table('products')->insert([
['name' => 'Apple Iphone X 128 Gb', 'code' => 'APPLEX128', 'price' => '999.9'],
['name' => 'Apple Iphone X 256 Gb', 'code' => 'APPLEX256', 'price' => '1149.9'],
['name' => 'Apple Iphone X 512 Gb', 'code' => 'APPLEX512', 'price' => '1349.9']
]);
插入数据成功后,可以通过lastInsertId()获取最后一条主键id,也可以通过rowCount()获取影响行数
更新或插入Upsert()
$db->table('products')->upsert([
'name' => 'Apple Iphone X 128 Gb',
'code' => 'APPLEX128',
'price' => '999.9'
]);
当字段中含有唯一索引(unique keys), 如果数据已存在,刚更新这条数据,如果不存在则添加数据
此方法不支持Sqlite
忽略插入insertIgnore()
$db->table('products')->insertIgnore([
'name' => 'Apple Iphone X 128 Gb',
'code' => 'APPLEX128',
'price' => '999.9'
]);
如果插入的数据在表中已经存在(主键或者唯一键已存在),使用insert ignore 语法可以忽略插入重复的数据。
替换插入insertReplace()
$db->table('products')->insertReplace([
'name' => 'Apple Iphone X 128 Gb',
'code' => 'APPLEX128',
'price' => '999.9'
]);
insertReplace 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。
要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。注意这个方法与upsert()的区别
数据过滤Filter
filter()实现了与表中的列对比提交的数据并自动整理掉不正确或多余的数据功能。它可以用于 insert()
, insertIgnore()
, insertReplace()
, upsert()
, update()
等方法。
假设我们有一个名为 users
的表,它包含了上述列。
Primary Not Null Not Null Not Null enum('Male', 'Female')
id name email password gender
代码 $db->table('users')->filter()->insert([ ... ]);
会使用 filter()
方法过滤提交的数据。由于它在 users
表中找不到 fullname
这一列,所以会自动清理这个数据,创建一个没有错误的记录。
$db->table('users')->filter()->insert($_POST);
对于使用 $_POST
提交的表单,这是一个示例用法模式。
数据验证validate:
validate()只能用于验证;它会筛选提交的数据,将空白提交字段填充为默认值,并执行 NOT NULL
和 ENUM
检查。
try{
$db->table('users')->validate()->insert([
'username' => 'walterbishop',
'email' => 'walter@bishop.com',
'password' => 'U7!hsjlIus',
'gender' => 'Elephant'
]);
} catch(Exception $e){
echo $e->getMessage();
}
因为 Elephant
不属于定义的 enum
值中,所以 gender
列将返回错误,且不会添加记录。