首页 后端开发 php教程 ThinkPHP数据操作方法总结_php实例

ThinkPHP数据操作方法总结_php实例

Jun 07, 2016 pm 05:11 PM
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('数据写入错误!');
}
}

登录后复制

访问执行该操作:http://127.0.0.1/html/Myapp/index.php/Index/insert

语法解读

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 表的所有数据读取出来并显示:

public function read()
{
$Dao = M("User"); // 查询数据
$list = $Dao->select();
//dump($list);
// 用 dump() 可以在调试阶段查看数据是否已读取
// 模板变量赋值 $this->assign("list", $list);
// 输出模板 $this->display();
}

登录后复制

假设上面的例子对应的 class 文件为 Lib/Action/IndexAction.class.php ,那么对应的模板文件为 Tpl/default/Index/read.html。

数据显示模板

模板文件用于显示刚才读取的 User 表的数据。在学习阶段,要不想使用模板,也可以直接使用 foreach 语法在 read() 操作内直接显示读取的数据。下面是模板相应的代码片段,我们将读取的数据在一个表格中显示出来:

<table border="1">
 <tr>
<th width="10%">ID</th>
 <th width="30%">用户名</th>
 <th width="30%">电子邮件</th>
<th>注册时间</th>
 </tr>
<volist name="list" id="vo">
<tr>
<td align="center">{$vo['uid']}</td>
 <td>{$vo['username']}</td>
<td>{$vo['email']}</td>
 <td>{$vo['regdate']|date='Y-m-d H:i',###}</td>
 </tr>
</volist>
</table>

登录后复制

要了解更多关于 ThinkPHP模板的知识,请参阅:《ThinkPHP 模板》。

field() 查询指定字段

select() 方法默认是查询所有字段的数据,如果要查询某个或某些字段,就需要使用 filed() 方法。

filed() 是属于 ThinkPHP 连贯操作中的一个方法,如在上面的例子中,只查询用户名和电子邮件地址,则查询方法对应更改为:

$list = $Dao->field('username,email')->select();

使用查询条件

使用 ThinkPHP 连贯操作可以很方便的对数据查询使用查询条件。下面是一些简单的查询条件的例子。

where() 条件

…… // 构造查询条件 $condition['username'] = 'Admin'; // 查询数据 $list = $Dao->where($condition)->select(); ……
上述查询的就是 username='Admin' 这个条件的数据。关于 ThinkPHP where 条件更详细资料,请参阅《ThinkPHP Where 条件》。

ORDER BY 排序

在查询中使用 ORDER BY 对数据进行排序:
…… // 查询数据 $list = $Dao->order('uid DESC')->select(); ……
这个例子就是数据按照 ORDER BY uid DESC 进行查询,而 order() 方法中的参数意义跟 SQL 语句中的意义完全一致。

LIMIT 限制

在查询中使用 LIMIT 限定数据返回的记录数:
…… // 查询数据 $list = $Dao->limit('4,5')->select(); ……
这个例子就是将第 5-10 条记录取出,limit() 方法内的参数意义跟 SQL 语句中的 LIMIT 完全一致。

连贯操作

ThinkPHP 中允许将数据对象中的各个方法写在一起操作,如:
$list = $Dao->order('uid DESC')->limit('4,5')->select();
这就是连贯操作,关于连贯操作更详细的介绍,参见《ThinkPHP 连贯操作》。

四、ThinkPHP 删除数据记录 delete 方法

ThinkPHP 中使用 delete() 方法来删除数据库中的数据记录,并且也支持连贯操作的使用。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 '删除数据失败!';
}
}

登录后复制

上面例子执行的 SQL 为:

DELETE FROM user WHERE uid = 5

delete() 方法可以用于删除单个或者多个数据,主要取决于 where() 删除条件。另外也可以配合连贯操作中的其他方法如 order()、limit() 等构造出更符合需要的删除条件:

$Dao = M("User");
$result = $Dao->where('status=0')->order('regdate ASC')->limit('5')->delete();

登录后复制

上面例子根据用户注册时间降序排列,删除 5 条 status=0 的用户记录。

希望本文所述对大家基于ThinkPHP框架的php程序设计有所帮助。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1421
52
Laravel 教程
1315
25
PHP教程
1266
29
C# 教程
1239
24
thinkphp项目怎么运行 thinkphp项目怎么运行 Apr 09, 2024 pm 05:33 PM

运行 ThinkPHP 项目需要:安装 Composer;使用 Composer 创建项目;进入项目目录,执行 php bin/console serve;访问 http://localhost:8000 查看欢迎页面。

thinkphp有几个版本 thinkphp有几个版本 Apr 09, 2024 pm 06:09 PM

ThinkPHP 拥有多个版本,针对不同 PHP 版本而设计。主要版本包括 3.2、5.0、5.1 和 6.0,而次要版本用于修复 bug 和提供新功能。当前最新稳定版本为 ThinkPHP 6.0.16。在选择版本时,需考虑 PHP 版本、功能需求和社区支持。建议使用最新稳定版本以获得最佳性能和支持。

thinkphp怎么运行 thinkphp怎么运行 Apr 09, 2024 pm 05:39 PM

ThinkPHP Framework 的本地运行步骤:下载并解压 ThinkPHP Framework 到本地目录。创建虚拟主机(可选),指向 ThinkPHP 根目录。配置数据库连接参数。启动 Web 服务器。初始化 ThinkPHP 应用程序。访问 ThinkPHP 应用程序 URL 运行。

laravel和thinkphp哪个好 laravel和thinkphp哪个好 Apr 09, 2024 pm 03:18 PM

Laravel 和 ThinkPHP 框架的性能比较:ThinkPHP 性能通常优于 Laravel,专注于优化和缓存。Laravel 性能良好,但对于复杂应用程序,ThinkPHP 可能更适合。

开发建议:如何利用ThinkPHP框架实现异步任务 开发建议:如何利用ThinkPHP框架实现异步任务 Nov 22, 2023 pm 12:01 PM

《开发建议:如何利用ThinkPHP框架实现异步任务》随着互联网技术的迅猛发展,Web应用程序对于处理大量并发请求和复杂业务逻辑的需求也越来越高。为了提高系统的性能和用户体验,开发人员常常会考虑利用异步任务来执行一些耗时操作,比如发送邮件、处理文件上传、生成报表等。在PHP领域,ThinkPHP框架作为一款流行的开发框架,提供了一些便捷的方式来实现异步任务。

thinkphp怎么安装 thinkphp怎么安装 Apr 09, 2024 pm 05:42 PM

ThinkPHP 安装步骤:准备 PHP、Composer、MySQL 环境。使用 Composer 创建项目。安装 ThinkPHP 框架及依赖项。配置数据库连接。生成应用代码。启动应用并访问 http://localhost:8000。

thinkphp性能怎么样 thinkphp性能怎么样 Apr 09, 2024 pm 05:24 PM

ThinkPHP 是一款高性能的 PHP 框架,具备缓存机制、代码优化、并行处理和数据库优化等优势。官方性能测试显示,它每秒可处理超过 10,000 个请求,实际应用中被广泛用于京东商城、携程网等大型网站和企业系统。

开发建议:如何利用ThinkPHP框架进行API开发 开发建议:如何利用ThinkPHP框架进行API开发 Nov 22, 2023 pm 05:18 PM

开发建议:如何利用ThinkPHP框架进行API开发随着互联网的不断发展,API(ApplicationProgrammingInterface)的重要性也日益凸显。API是不同应用程序之间进行通信的桥梁,它可以实现数据共享、功能调用等操作,为开发者提供了相对简单和快速的开发方式。而ThinkPHP框架作为一款优秀的PHP开发框架,具有高效、可扩展和易用

See all articles