ThinkPHP数据操作方法总结
ThinkPHP  /  管理员 发布于 8年前   223
本文实例总结了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() 操作: 访问执行该操作:http://127.0.0.1/html/Myapp/index.php/Index/insert 语法解读 M("User") 用于高效实例化一个数据模型(M 是 new Model 的简写,称为快捷方法),参数为要操作的表名。 接下来构建要保存数据的数组 $data 。 最后是用 add() 方法将数据写入库表,由于使用的是 M快捷方法,需要将 $data 数组传入 add() 方法。 add() 方法如果添加数据记录成功,返回的是新数据记录主键,可直接得到。 提示:运行该例子,请确认在配置文件里正确配置了数据库的相关账号密码等信息,具体参见《ThinkPHP公共配置文件与各自项目中配置文件组合的方法》 上面的方式是以构造数据数组的方式,然后将数据以参数形式传入 add 方法写入数据表。ThinkPHP 也支持以对象的方式将数据写入数据表,将上面的代码更改为: 对象方式除了数据以数据对象方式赋值外,在调用 add 方法写入数据的时候不需要传递参数。 二、ThinkPHP 更新数据 save方法 save() ThinkPHP 中使用 save() 方法来更新数据库,并且也支持连贯操作的使用。 上面例子执行的 SQL 语句为: UPDATE user SET email='[email protected]' WHERE username='Jack' 提示 为了保证数据库的安全,避免出错更新整个数据表,如果没有任何更新条件,数据对象本身也不包含主键字段的话,save方法不会更新任何数据库的记录。 因此要使用 save() 方法更新数据,必须指定更新条件或者更新的数据中包含主键字段。 使用主键的例子: 如果需要更新的数据里面包含主键,那么 ThinkPHP 会自动把主键的值作为条件来更新。 上面的例子跟下面的效果相同: // 需要更新的数据 $data['email'] = '[email protected]'; 如果更新的数据需要做逻辑处理,可以在操作类以对象的方式处理或者在模型内处理,具体可参考《ThinkPHP 表单数据智能写入 create 方法》。 注意:以create() 方法创建数据对象来更新数据,表单中必须包含一个以主键为名称的隐藏域,才能完成保存操作。 三、ThinkPHP 查询数据 select(findAll)方法 ThinkPHP 查询数据主要提供以下几类查询: select() select() 是 ThinkPHP 中最常用的普通查询方法,得到的是一个二维数组。findAll() 为 select() 方法的别名,并建议使用 select()。 读取操作 下面的例子将 user 表的所有数据读取出来并显示: 假设上面的例子对应的 class 文件为 Lib/Action/IndexAction.class.php ,那么对应的模板文件为 Tpl/default/Index/read.html。 数据显示模板 模板文件用于显示刚才读取的 User 表的数据。在学习阶段,要不想使用模板,也可以直接使用 foreach 语法在 read() 操作内直接显示读取的数据。下面是模板相应的代码片段,我们将读取的数据在一个表格中显示出来: 要了解更多关于 ThinkPHP模板的知识,请参阅:《ThinkPHP 模板》。 field() 查询指定字段 select() 方法默认是查询所有字段的数据,如果要查询某个或某些字段,就需要使用 filed() 方法。 filed() 是属于 ThinkPHP 连贯操作中的一个方法,如在上面的例子中,只查询用户名和电子邮件地址,则查询方法对应更改为: $list = $Dao->field('username,email')->select(); 使用查询条件 使用 ThinkPHP 连贯操作可以很方便的对数据查询使用查询条件。下面是一些简单的查询条件的例子。 where() 条件 …… // 构造查询条件 $condition['username'] = 'Admin'; // 查询数据 $list = $Dao->where($condition)->select(); …… ORDER BY 排序 在查询中使用 ORDER BY 对数据进行排序: LIMIT 限制 在查询中使用 LIMIT 限定数据返回的记录数: 连贯操作 ThinkPHP 中允许将数据对象中的各个方法写在一起操作,如: ThinkPHP 中使用 delete() 方法来删除数据库中的数据记录,并且也支持连贯操作的使用。delete() 方法执行成功返回操作影响(删除)的记录数。 例子: 上面例子执行的 SQL 为: DELETE FROM user WHERE uid = 5 delete() 方法可以用于删除单个或者多个数据,主要取决于 where() 删除条件。另外也可以配合连贯操作中的其他方法如 order()、limit() 等构造出更符合需要的删除条件: 上面例子根据用户注册时间降序排列,删除 5 条 status=0 的用户记录。 希望本文所述对大家基于ThinkPHP框架的php程序设计有所帮助。public function insert(){header("Content-Type:text/html; "); $Dao = M("User"); // 实例化模型类 // 构建写入的数据数组 $data["username"] = "小王"; $data["password"] = md5("123456"); $data["email"] = [email protected];$data["regdate"] = time(); // 写入数据if($lastInsId = $Dao->add($data)){echo "插入数据 id 为:$lastInsId"; }else { $this->error('数据写入错误!');}}
该例子实际运行的 SQL 为:INSERT INTO user(username,password,email,regdate) VALUES('小王','e10adc3949ba59abbe56e057f20f883e','[email protected]',1283612673)
对象方式添加数据public function insert(){header("Content-Type:text/html; charset=utf-8"); $Dao = M("User"); // 实例化模型类 // 数据对象赋值$Dao->username = "小王"; $Dao->password = md5("123456"); $Dao->email = [email protected]; $Dao->regdate = time(); // 写入数据if($lastInsId = $Dao->add()){ echo "插入数据 id 为:$lastInsId";} else {$this->error('数据写入错误!'); }}
例子:public function update(){header("Content-Type:text/html; charset=utf-8");$Dao = M("User"); // 需要更新的数据 $data['email'] = '[email protected]';// 更新的条件 $condition['username'] = 'Jack'; $result = $Dao->where($condition)->save($data);//或者:$resul t= $Dao->where($condition)->data($data)->save();if($result !== false){ echo '数据更新成功!';}else{echo '数据更新失败!'; }}
public function update(){ header("Content-Type:text/html; charset=utf-8"); $Dao = M("User"); // 需要更新的数据 $data['email'] = '[email protected]'; $data['uid'] = 2; $result = $Dao->save($data);if($result !== false){echo '数据更新成功!'; }else{echo '数据更新失败!'; }}
// 更新的条件 $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()); }}
select:普通查询,同 findAll() 方法
find:取得符合查询条件的一条记录
getBy动态查询:根据某个字段取得符合查询条件的一条记录
getField:获取某个字段的值或多个字段的索引数组
区间查询:取得符合查询条件的区间记录
统计查询:取得符合查询条件的统计数据
定位查询:取得符合查询条件的一条或多条记录
原生SQL查询:支持以原生 SQL 进行查询或执行操作public function read(){$Dao = M("User"); // 查询数据$list = $Dao->select();//dump($list);// 用 dump() 可以在调试阶段查看数据是否已读取// 模板变量赋值 $this->assign("list", $list);// 输出模板 $this->display();}
ID 用户名 电子邮件 注册时间 {$vo['uid']} {$vo['username']} {$vo['email']} {$vo['regdate']|date='Y-m-d H:i',###}
上述查询的就是 username='Admin' 这个条件的数据。关于 ThinkPHP where 条件更详细资料,请参阅《ThinkPHP Where 条件》。
…… // 查询数据 $list = $Dao->order('uid DESC')->select(); ……
这个例子就是数据按照 ORDER BY uid DESC 进行查询,而 order() 方法中的参数意义跟 SQL 语句中的意义完全一致。
…… // 查询数据 $list = $Dao->limit('4,5')->select(); ……
这个例子就是将第 5-10 条记录取出,limit() 方法内的参数意义跟 SQL 语句中的 LIMIT 完全一致。
$list = $Dao->order('uid DESC')->limit('4,5')->select();
这就是连贯操作,关于连贯操作更详细的介绍,参见《ThinkPHP 连贯操作》。
四、ThinkPHP 删除数据记录 delete 方法public function del(){ header("Content-Type:text/html; charset=utf-8");$Dao = M("User"); // 删除 uid=5 的数据记录 $result = $Dao->where('uid = 5')->delete(); if($result !== false){echo '删除 ',$result,' 条数据。';}else{ echo '删除数据失败!';}}
$Dao = M("User");$result = $Dao->where('status=0')->order('regdate ASC')->limit('5')->delete();
您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号