首頁 > php教程 > php手册 > 主體

ThinkPHP数据操作方法总结

WBOY
發布: 2016-06-06 19:42:40
原創
1126 人瀏覽過

这篇文章主要介绍了ThinkPHP数据操作方法,以实例形式较为详细的分析总结了ThinkPHP添加、更新、查询及删除数据的实现技巧,具有一定参考借鉴价值,需要的朋友可以

本文实例总结了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 表的所有数据读取出来并显示:

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!