FuelPHP框架学习笔记(三)——增删改查

准备工作:接着前面两篇article的示例,在Controller里新建一个myquery的action,Model里新建一个myquery的function,View里接收Controller调用Model返回的结果并打印出来。

select语句

直接在query()方法里传入sql语句并执行

$result = DB::query(’select * from articles;’)->execute();

这时候如果return $result;给Controller,会发现页面上抛出了一个异常Database results are read-only。这是为什么呢?在model里将需要返回的$result打印出来可以发现,结果是一个对象,而在controller里需要赋值给一个数组,这时候就需要执行as_array()。

$result = DB::query(’select * from articles;’)->execute()->as_array();

此时返回$result后在view里打印出来就没有问题了。

从articles表里select所有信息

$result = DB::select()->from(’articles’)->execute();

select指定column

$result = DB::select(’title’, ’body’)->from(’articles’)->execute();

select指定column并取别名

$result = DB::select(array(’title’, ’title_2’), ’body’)->from(’articles’)->execute();

指定where等于条件
1
2
$result = DB::select()->from(’articles’)->where(’id’, 1)->execute();
$result = DB::select()->from(’articles’)->where(’id’, ’=’, 1)->execute();
where不等于条件

$result = DB::select()->from(’articles’)->where(’id’, ’!=’, 1)->execute();

where in某一范围

$result = DB::select()->from(’articles’)->where(’id’, ’in’, array(1, 2))->execute();

between某一范围

$result = DB::select()->from(’articles’)->where(’id’, ’between’, array(1, 2))->execute();

模糊匹配

$result = DB::select()->from(’articles’)->where(’title’, ’like’, ’%iat%’)->execute();

按某一字段排序

$result = DB::select()->from(’articles’)->order_by(’id’,’asc’)->execute();

多个字段排序

$result = DB::select()->from(’articles’)->order_by(’id’,’asc’)->order_by(’title’, ’desc’)->execute();

限定取出的条数
1
2
$result = DB::select()->from(’articles’)->limit(1)->execute();
$result = DB::select()->from(’articles’)->limit(10)->offset(2)->execute();

update语句

跟基本的SQL语句一样,update返回的是受影响的条数,根据返回值得结果判断是否更新成功。

修改某一字段的值
1
$result = DB::update(’articles’)->value("title", "iatboy")->where(’id’, ’=’, ’1’)->execute();
修改多个字段的值

$result = DB::update(’articles’)->set(array(’title’ => ’iatboy’, ’body’ => ’iatboy body’))->where(’id’, ’=’, ’1’)->execute();

insert语句

insert语句返回的是数组,包含插入的id以及受影响的条数 set的方式插入

$result = DB::insert(’articles’)->set(array(’title’ => ’iat001’, ’body’ => ’body001’))->execute();

指定column值得方式插入

$result = DB::insert(’articles’)->columns(array(’title’, ’body’))->values(array(’iat002’, ’body002’))->execute();

delete语句 delete语句返回的是受影响的条数

$result = DB::delete(’articles’)->where(’id’, ’=’, ’1’)->execute();

join语句

对应的有left join和right join

$result = DB::select()->from(’articles’)->join(’comments’,’right outer’)->on(’articles.id’, ’=’, ’comments.id’)->execute();

绑定参数语句

绑定参数及预处理可以在一定程度上减少SQL注入的风险,实际上也是通过转义进行过滤的。

1
2
$title = ’iat001’;
$result = DB::query("SELECT * FROM articles WHERE title = :title")->bind(’title’, $title)->execute();

如下的方式绑定变量是不正确的。

$result = DB::query("SELECT * FROM articles WHERE title = :title")->bind(’title’, ’iat001’)->execute();

直接赋值的话需要用到param

$result = DB::query("SELECT * FROM articles WHERE title = :title")->param(’title’, ’iat001’)->execute();

绑定多个参数

$result = DB::query("SELECT * FROM articles WHERE title = :title AND body = :body")->parameters(array(’title’ => $title, ’body’ => ’body001’))->execute();

数据缓存

使用数据缓存有利于减轻数据库服务器压力,加快响应时间,当然对于经常变动的值不建议使用数据缓存。cache()函数可传递三个参数,缓存时间、保存文件、是否缓存空值

1
2
$result = DB::query("SELECT * FROM articles")->cached(3600)->execute();
$result = DB::query("SELECT * FROM articles")->cached(3600, "articles", false)->execute();

采用delete方法可以删除某一具体缓存,delete_all方法可以删除某一目录下的所有缓存。

1
2
Cache::delete("articles");
Cache::delete_all("db");

事务

事务的ACID特性在数据库的安全性方面起到了很大的作用,FuelPHP中事务的使用如下:

1
2
3
4
5
6
7
try {
DB::start_transaction();
$result = DB::insert(’articles’)->set(array(’title’ => ’iat001’, ’body’ => ’body001’))->execute();
DB::commit_transaction();
} catch(Exception $e) {
DB::rollback_transaction();
}

至此,FuelPHP基本的增删改查结束。

Just a beginner.<br /><a href='https://github.com/yaoshanliang/about' target='_blank'>profile</a>