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程序设计有所帮助。

(0)

相关推荐

  • ThinkPHP中数据操作案例分析

    本文实例分析了ThinkPHP中数据操作方法.分享给大家供大家参考.具体如下: 模板中使用函数,相信大部分的TPer都知道也用过吧. 案例: 获取用户名的方法 function get_username($uid){ $row = M('User')->getbyUid($uid); return $row['username']; } 在模板中通过uid显示用户名 <volist name="rows" id="row"> <tr>

  • ThinkPHP3.2.3数据库设置新特性

    ThinkPHP3.2.3版本数据库驱动采用PDO完全重写,配置和使用上面也比之前版本更加灵活和强大,我们来了解下如何使用. 首先,3.2.3的数据库配置信息有所调整,完整的数据库设置包括: 复制代码 代码如下: /* 数据库设置 */  'DB_TYPE'               =>  '',     // 数据库类型  'DB_HOST'               =>  '', // 服务器地址  'DB_NAME'               =>  '',       

  • ThinkPHP表单数据智能写入create方法实例分析

    本文实例讲述了ThinkPHP表单数据智能写入create方法.分享给大家供大家参考.具体如下: 创建数据对象 create() 除了手动构造入库的数据集之外,ThinkPHP 还提供了自动创建数据对象的 create() 方法.create() 方法将自动收集提交的表单数据并创建数据对象而无需人工干预,这在表单数据字段非常多的情况下更具优势. 将前文写入表单数据的例子用 create() 来实现: public function insert2(){ header("Content-Type:

  • ThinkPHP3.1数据CURD操作快速入门

    1.CURD概述: CURD是一个数据库技术中的缩写词,一般的项目开发的各种参数的基本功能都是CURD.它代表创建(Create).更新(Update).读取(Read)和删除(Delete)操作.CURD 定义了用于处理数据的基本原子操作.之所以将CURD提升到一个技术难题的高度是因为完成一个涉及在多个数据库系统中进行CURD操作的汇总相关的活动,其性能可能会随数据关系的变化而有非常大的差异. CURD在具体的应用中并非一定使用create.update.read和delete字样的方法,但是

  • ThinkPHP连接数据库的方式汇总

    本文实例汇总了ThinkPHP连接数据库的几种常用方式.分享给大家供大家参考.具体如下: ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库适配器来处理,目前的数据库包括Mysql.MsSQL.PgSQL.Sqlite.Oracle.Ibase以及PDO的支持,如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式: 第一种:在项目配置文件里面定

  • 浅析THINKPHP的addAll支持的最大数据量

    Thinkphp中的Model操作有两个方法:add()和addAll 复制代码 代码如下: $User = M("User"); // 实例化User对象  $data['name'] = 'ThinkPHP';  $data['email'] = 'ThinkPHP@gmail.com';  $User->add($data);  $dataList[] = array('name'=>'thinkphp','email'=>'thinkphp@gamil.com

  • thinkphp配置连接数据库技巧

    本文实例讲述了thinkphp配置连接数据库的常用方法,分享给大家供大家参考.具体方法如下: 1.在thinkphp入口文件同目录下的config.inc.php中添加数据库配置信息 复制代码 代码如下: <?php  return array(  'DB_TYPE'=>'mysqli',  'DB_HOST'=>'localhost',  'DB_NAME'=>'demo',  'DB_USER'=>'root',  'DB_PWD'=>'root',  'DB_PR

  • thinkphp备份数据库的方法分享

    貌似THINKPHP没有备份数据库的方法,所以我自己写了一个,数据库连接和事务处理用的是pdo,如果有需要的可以联系我,写个mysql或者mysqli的 复制代码 代码如下: <?php class SqlAction extends Action{ function outsql(){ header("Content-Type:text/html;charset=utf-8″); /*用C方法读取数据库配置*/ $host=C('DB_HOST'); $db_name=C('DB_NAM

  • 基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据

    废话不多说,直接给大家贴代码了,代码附有注释,相信大家都能看懂的,有不明白的地方欢迎给我留言. 前端HTML+JQuery  备注Jquery需要1.x版本,不能用2.x版本 1.引入必要文件及上传input <load file="__PUBLIC__/js/jquery-1.11.3.min.js" /> <load file="__PUBLIC__/uploadify/jquery.uploadify.min.js" /> <lo

  • ThinkPHP3.1新特性之多数据库操作更加完善

    通常情况下,如果一个应用只是操作同一个数据库(或者分布式数据库)的话,你只需要在项目配置文件中定义数据库连接信息即可.这里说的多数据库操作一般指的是在一个应用中会操作不同的数据库(包括同类型的和不同类型的数据库),甚至包括动态切换多数据库的情况. 对于早期版本的ThinkPHP来说,切换数据库需要使用高级模型,而现在的3.1版本则可以更加轻松的解决了. 新版对多数据的支持有下面几种方式,开发人员可以根据实际情况选择合适的方式操作: 1.模型定义数据库 如果只是简单的跨库操作,并且只是个别模型类的

随机推荐