本文实例总结了thinkphp数据操作方法。分享给大家供大家参考。具体如下:
一、thinkphp insert 添加数据
thinkphp 内置的 add 方法用于向数据表添加数据,相当于 sql 中的 insert into 行为。
添加数据 add 方法是 curd(create,update,read,delete / 创建,修改,读取,删除)中的 create 的实现,thinkphp 支持以普通数组方式和面向对象方式将数据写入数据表。
现在以《php mysql 数据库教程》中操作 user 表数据的例子(具体参见:php+mysql之insert into数据插入用法分析)为例,来演示如何在 thinkphp 中实现对数据表的数据添加操作。
例子:
在 indexaction 控制器(lib/action/indexaction.class.php)里,添加 insert() 操作:
public function insert(){header(content-type:text/html; charset=utf-8); $dao = m(user); // 实例化模型类 // 构建写入的数据数组 $data[username] = 小王; $data[password] = md5(123456); $data[email] = 12345@163.com;$data[regdate] = time(); // 写入数据if($lastinsid = $dao->add($data)){echo 插入数据 id 为:$lastinsid; }else { $this->error('数据写入错误!');}}
访问执行该操作:
语法解读
m(user) 用于高效实例化一个数据模型(m 是 new model 的简写,称为快捷方法),参数为要操作的表名。
接下来构建要保存数据的数组 $data 。
最后是用 add() 方法将数据写入库表,由于使用的是 m快捷方法,需要将 $data 数组传入 add() 方法。
add() 方法如果添加数据记录成功,返回的是新数据记录主键,可直接得到。
该例子实际运行的 sql 为:
insert into user(username,password,email,regdate) values('小王','e10adc3949ba59abbe56e057f20f883e','12345@163.com',1283612673)
提示:运行该例子,请确认在配置文件里正确配置了数据库的相关账号密码等信息,具体参见《thinkphp公共配置文件与各自项目中配置文件组合的方法》
对象方式添加数据
上面的方式是以构造数据数组的方式,然后将数据以参数形式传入 add 方法写入数据表。thinkphp 也支持以对象的方式将数据写入数据表,将上面的代码更改为:
public function insert(){header(content-type:text/html; charset=utf-8); $dao = m(user); // 实例化模型类 // 数据对象赋值$dao->username = 小王; $dao->password = md5(123456); $dao->email = 12345@163.com; $dao->regdate = time(); // 写入数据if($lastinsid = $dao->add()){ echo 插入数据 id 为:$lastinsid;} else {$this->error('数据写入错误!'); }}
对象方式除了数据以数据对象方式赋值外,在调用 add 方法写入数据的时候不需要传递参数。
二、thinkphp 更新数据 save方法
save()
thinkphp 中使用 save() 方法来更新数据库,并且也支持连贯操作的使用。
例子:
public function update(){header(content-type:text/html; charset=utf-8);$dao = m(user); // 需要更新的数据 $data['email'] = 'jack@163.com';// 更新的条件 $condition['username'] = 'jack'; $result = $dao->where($condition)->save($data);//或者:$resul t= $dao->where($condition)->data($data)->save();if($result !== false){ echo '数据更新成功!';}else{echo '数据更新失败!'; }}
上面例子执行的 sql 语句为:
update user set email='jack@163.com' where username='jack'
提示
为了保证数据库的安全,避免出错更新整个数据表,如果没有任何更新条件,数据对象本身也不包含主键字段的话,save方法不会更新任何数据库的记录。
因此要使用 save() 方法更新数据,必须指定更新条件或者更新的数据中包含主键字段。
使用主键的例子:
public function update(){ header(content-type:text/html; charset=utf-8); $dao = m(user); // 需要更新的数据 $data['email'] = 'jack@163.com'; $data['uid'] = 2; $result = $dao->save($data);if($result !== false){echo '数据更新成功!'; }else{echo '数据更新失败!'; }}
如果需要更新的数据里面包含主键,,那么 thinkphp 会自动把主键的值作为条件来更新。
上面的例子跟下面的效果相同:
// 需要更新的数据 $data['email'] = 'jack@163.com';
// 更新的条件 $condition['uid'] = 2; $result = $dao->where($condition)->save($data);
如果是表单数据,还可以使用 create() 方法创建数据对象来更新数据:
public function update(){header(content-type:text/html; charset=utf-8); $dao = d(user); if($vo = $dao->create()){ $result = $dao->save();if($result !== false){ echo '数据更新成功!';}else{echo '数据更新失败!'; } }else{$this->error($form->geterror()); }}
如果更新的数据需要做逻辑处理,可以在操作类以对象的方式处理或者在模型内处理,具体可参考《thinkphp 表单数据智能写入 create 方法》。
注意:以create() 方法创建数据对象来更新数据,表单中必须包含一个以主键为名称的隐藏域,才能完成保存操作。
三、thinkphp 查询数据 select(findall)方法
thinkphp 查询数据主要提供以下几类查询:
select:普通查询,同 findall() 方法
find:取得符合查询条件的一条记录
getby动态查询:根据某个字段取得符合查询条件的一条记录
getfield:获取某个字段的值或多个字段的索引数组
区间查询:取得符合查询条件的区间记录
统计查询:取得符合查询条件的统计数据
定位查询:取得符合查询条件的一条或多条记录
原生sql查询:支持以原生 sql 进行查询或执行操作
select()
select() 是 thinkphp 中最常用的普通查询方法,得到的是一个二维数组。findall() 为 select() 方法的别名,并建议使用 select()。
读取操作
下面的例子将 user 表的所有数据读取出来并显示:
