kohana数据库查询器.docx

上传人:b****8 文档编号:9790210 上传时间:2023-02-06 格式:DOCX 页数:12 大小:19.69KB
下载 相关 举报
kohana数据库查询器.docx_第1页
第1页 / 共12页
kohana数据库查询器.docx_第2页
第2页 / 共12页
kohana数据库查询器.docx_第3页
第3页 / 共12页
kohana数据库查询器.docx_第4页
第4页 / 共12页
kohana数据库查询器.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

kohana数据库查询器.docx

《kohana数据库查询器.docx》由会员分享,可在线阅读,更多相关《kohana数据库查询器.docx(12页珍藏版)》请在冰豆网上搜索。

kohana数据库查询器.docx

kohana数据库查询器

Kohana数据库查询器

使用查询器方法无关数据库查询和数据操作。

用法

首先实例化数据库类

//如果你的类继承自模型,$this->db已经声明。

//此列就不行了

$this->db=newDatabase();

 

//组建查询条件:

$this->db->from('users');

$this->db->select('username');

$this->db->where('id',1);

//上面的查询器相当于SQL语句:

'SELECTusernameFROMusersWHEREid=1'

执行get(),insert(),update(),delete()方法来查询结果:

$result=$this->db->get();

//上下两个结果$result返回的结果是一样的:

$result=$this->db->query('SELECTusernameFROMusersWHEREid=1');

所有的查询器方法返回的都是Database类,所以你可以使用串联方法:

$result=$this->db->from('users')->select('username')->where('id',1)->get();

局限性

当数据库类的查询器部分非常强大和易于使用,但它的确有一些局限性。

最主要的原因在于它会对输入项进行转义。

因此下面的事情不会正常工作:

1.数据库中的计算:

$db→update('pages',array('views'⇒'views+1'))。

由于会对输入值进行转义,所以它无法计算得出结果。

2.圆括号支持:

比如SELECT*FROMpagesWHERE(id=5)OR(title=“BLAH”ANDid=15)不会正常工作,因为查询器没有能力识别圆括号。

这个特性将会在未来的版本中解决。

3.任何数据库内置特殊函数:

比如MySQL'sNOW()汉化将会进行转义而不能正常工作。

在未来的版本中将会有一个选项可以设置自动关闭查询转义功能。

解决这个问题又两个关联的问题。

这对原因导致我们目前无法支持:

∙如果查询器要支持服务器的无关数据库访问。

在你的查询器中加入DB指定函数声明会导致完全破坏掉这点。

∙对每个数据库服务器来说有太多的函数需要支持,而且对于还有检查所有功能的可用性。

Kohana专注于速度,所以有时必须进行取舍。

∙引用是必须为表/列明去发挥最大的灵活性。

方法

select()

select()方法可以选择查询你想要的表结构的名称。

$db=newDatabase();

$db->select('id,title');

//或者

$db->select(array('id','title'));

这是查询选择表中的`id`,`title`字段。

注意查询器会自动为你转义列名。

且如果你没有使用此方法的话,你的查询会自动设置为“SELECT*”。

你也可以进行多表查询:

$db->select('users.id,pages.title');

转换为SQL语句:

SELECT`users`.`id`,`pages`.`title`

您还可以指定列别名:

$db->select('idaspage_id','titleaspage_title');

转换为SQL语句:

SELECT`id`AS`page_id`,`title`AS`page_title`

获取DISTINCTdata:

$db->select('DISTINCTuser')

转换为SQL语句:

SELECTDISTINCT`user`

from()

from()方法设置你想从哪个表选择。

你可以使用数组方式或者逗号分隔输入表名。

$db->from('pages');

 

//或者

 

$db->from(array('pages','users'));

转换为SQL就是:

“FROM`pages`,`users`”。

注意查询器会自动为你转义输入值。

你也可以指定表别名就像上面的select()方法。

where()

where()方法设置查询语句中的条件。

通过传递列名和值完成一个条件,或者通过数组方式传递多个列明和值。

系统会使用AND连接他们。

$db->where('id',5);

$db->where(array('id'=>5));

$db->where(array('id'=>5,'title'=>'Demo'));

SQL语句:

WHERE`id`=5AND`title`=“Demo”

wherenot

$db->where(array('id!

='=>$some_id));

更多操作

$db->where(array('id>='=>$some_id));

$db->where(array('id<'=>$some_id));

//...等等

isnull

$db->where('colnameISNULL');

//OR...

$db->where(array('colname'=>null));

orwhere()

同上面的方法,与上面不同的的是,它使用的是OR连接。

$db->orwhere(array('id'=>5,'title'=>'Demo'));

SQL语句:

WHERE`id`=5OR`title`=“Demo”

like()

和where()方法相同,只不过把WHERE用LIKE替换:

$db->like('title','Demo');

SQL语句:

WHERE`title`LIKE”%Demo%”

你也可以手动添加你想要的方式:

$db->like('title','%Demo');

$db->like('title','Demo%');

当然,使用数组方式同样也可以实现。

但数组之间使用的AND连接:

$db->like(array('title'=>'Demo','subtitle'=>'Start'));

SQL语句:

WHERE`title`LIKE”%Demo%”AND`subtitle`LIKE”%Start%”

orlike()

和like()方法相同,只不过它使用OR连接:

$db->orlike(array('title'=>'Demo','subtitle'=>'Start'));

SQL语句:

WHERE`title`LIKE”%Demo%”OR`subtitle`LIKE”%Start%”

notlike()

和like()方法相同,但它是以NOTLIKE连接:

$db->notlike('title'=>'Demo');//SQL语句:

"WHERE`title`NOTLIKE"%Demo%""

$db->notlike(array('title'=>'Demo','subtitle'=>'Start'));//SQL语句:

"WHERE`title`NOTLIKE"%Demo%"AND`subtitle`NOTLIKE"%Start%""

ornotlike()

和like()方法相同,但它是以ORNOTLIKE连接:

$db->ornotlike(array('title'=>'Demo','subtitle'=>'Start'));//SQL语句:

"WHERE`title`NOTLIKE"%Demo%"OR`subtitle`NOTLIKE"%Start%""

in()

创建IN条件查询。

它有三个参数:

1.匹配的列

2.一个数组或字符串值相比配

3.(boolean),创建一个NOT从句代替

$db->in('title',array(1,2,3,4,5));

SQL语句:

`title`IN('1','2','3','4','5')

notin()

和in()方法相同,但它是以NOTIN从句代替。

你也使用这个方法(两个参数)或者使用in()并设置第三个参数为TRUE。

$db->notin('title',array(1,2,3,4,5));

 

//或者

 

$db->in('title',array(1,2,3,4,5),TRUE);

SQL语句:

`title`NOTIN('1','2','3','4','5')

regex()

此方法允许你使用正则表达式去搜索。

其语法和like()方法相同。

$db->regex('title','Demo|Sample');

$db->regex(array('title'=>'Demo|Sample'));

orregex()

和regex()方法相同,但它使用OR连接多个从句。

notregex()

和regex()方法相同,但它使用NOTREGEX连接多个从句。

ornotregex()

和regex()方法相同,但它使用ORNOTREGEX连接多个从句。

groupby()

创建GROUPBY语句查询。

你可以传递字符串或数组。

$db->groupby('title');

$db->groupby(array('title','id'));

having()

创建HAVING语句查询。

其语法和like()方法相同。

$db->having('title','Demo');

orhaving()

和having()方法相同。

但它使用OR连接多个从句。

get()

执行目前的查询器报表。

它有三个参数:

1.设置表名

2.设置limit

3.如果设置位移,可以设置偏移量

在执行此语句之后返回一个对象型的数据库结果。

$query=$db->from('pages')->where(array('id>='=>5))->get();

 

//等同于

$query=$db->where(array('id>='=>5))->get('pages');

getwhere()

和上面方法相同,只不过它的参数为:

1.设置表名

2.设置where条件

3.设置limit

4.如果设置位移,可以设置偏移量

那么,下面的例子和上面的还是相同的:

$query=$db->getwhere('pages',array('id>='=>5));

set()

为插入创建SET语句。

你可以传递一个或两个参数:

$db->set('column','value');

 

//或者

 

$db->set(array('column'=>'value'));

merge()

执行合并查询。

此方法的行为会影响并改变正在使用的后端数据库。

在MySQL数据库中,例如,数据库搜索一个存在的列,如果存在就删除此行,在插入新的一行。

此语法类似于更新(update)。

insert()

进行数据库插入查询。

这个方法有两个参数

1.一个是要插入的表

2.一个是要插入的关联列数组和他们的值

$status=$db->insert('pages',array('title'=>'Mynewtitle'));

 

//计算有多少行要插入

$rows=count($status);

返回一次查询结果(和你用“Database:

:

query())”返回的对象是一样的)

如果您有在另一个查询器方法设置它的话,你也可以您也可以省略所有参数:

$db->from('pages')->set(array('title'=>'Mynewtitle'))->insert();

update()

执行数据库更新查询。

它有三个参数:

1.需要更新的表名。

2.关联数组的列和它们新值。

3.WHERE语句的更新。

既可以是字符串也可以是关联数组。

详细请查询where()方法。

$status=$db->update('pages',array('title'=>'Mynewtitle'),array('id'=>5));

 

//返回多少列更新的计数

$rows=count($status);

如果您用另一个查询器方法设置它的话,您也可以省略所有参数:

$db->from('pages')->set(array('title'=>'Mynewtitle'))->where(array('id'=>5))->update();

必须注意的是,上述方法只能用于在没有表前缀的情况下。

如果有表前缀,例如prefix_pages,那么会出错,请使用下列方法之一

$db->set(array('title'=>'Mynewtitle'))->where(array('id'=>5))->update('pages');//将表名放到update语句里

//or

$db->from('pages')->set(array('title'=>'Mynewtitle'))->where(array('id'=>5))->update('pages');//from和update均添加表名

delete()

执行删除数据库中的数据。

它有2个参数:

1.需要删除的表名。

2.WHERE语句的删除条件。

这个既可以是字符串也可以是数组。

详情请查看where()方法。

$status=$db->delete('pages',array('id'=>5));

 

//返回删除列的计数

$rows=count($status);

您还可以设置表并用查询器的insert()方法和update()放在WHERE语句上面。

offset()

创建查询的偏移量。

这会导致记录开始在不同的起点。

//设置开始偏移量为10。

$db->offset(10);

limit()

创建限制部分查询。

第一个参数你要查询限制的结果数量。

你也可以在这个方法设置偏移(offset)做第二个参数:

//限制查询15条记录

$db->limit(15);

 

//或者

 

//从偏移量10开始限制查询15条记录

$db->limit(15,10);

orderby()

根据指定的查询进行结果排序。

它有两个参数:

1.排序的字段(也可以使用数组设置多个字段)

2.排序的方式(默认是ASC)

$db->orderby('title','ASC');

你也可以使用下面针对Mysql数据的代码进行随机排序:

$db->orderby(NULL,'RAND()');

orderby()方法也支持多字段排序,如果你设置的是数组形式。

$db->orderby(array('id'=>'ASC','date_created'=>'ASC'));

join()

连接两个表。

1.string-要连接的表名

2.string/array-where键名或键名⇒值形式的数组

3.string-where值

4.string-连接类型-LEFT,RIGHT,OUTER,INNER,LEFTOUTER,RIGHTOUTER

//执行查询连接user_roles表

$db->from('users_roles');

 

//把roles连接到user_roles

$db->join('roles','roles.id','users_roles.role_id');

 

//执行查询

$db->get();

同样可以使用数组语法的join:

$this->db->join('roles',array('roles.id'=>'users_roles.role_id'));

count_records()

查询记录的计数值。

1.string-表名

2.array-where语句

//所有用户的计数值

$count=$db->count_records('users');

 

//禁止(banned)用户的计数值

$banned_users_count=$db->count_records('users',array('banned'=>1));

 

//或者这样使用

$banned_users_count=$db->where('banned',1)->count_records('users');

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1