首页 php教程 PHP开发 CodeIgniter学习笔记 Item5--CI中的AR

CodeIgniter学习笔记 Item5--CI中的AR

Dec 29, 2016 am 10:23 AM

AR(Active Record)

在启用AR的情况下(CI3.0默认已经启动并且没有配置项),通过

$this->db
登录后复制


的get方法可以获得一张表的结果集

[code]// AR会自动加上表前缀,因此get方法中的表名不用加上表前缀
$res = $this->db->get('user');
foreach ($res->result() as $item)
{
    echo $item->name . "
"; }
登录后复制


通过insert方法可以简单的插入一条记录,参数是表名和关联数组

[code]$data = array('name'=>'mary', 'password'=>md5('mary'));
$result = $this->db->insert('user', $data);
登录后复制


通过update方法修改记录,第一个参数是表明,第二个参数是修改后的内容,用关联数组表示,第三个参数是查询条件

[code]$data = array ('email'=>'mary@gmail.com', 'password'=>md5('123456'));
$this->db->update('user', $data, array('name'=>'mary'));
登录后复制


通过delete方法删除一条记录,参数一是表名,参数二是查询条件

[code]$this->db->delete('user', array('name'=>'mary'));
登录后复制




连贯操作,对于比较复杂的SQL语句,可以使用AR提供的连贯操作进行查询

[code]$result = $this->db->select('id, name')
            ->from('user')
            ->where('id >=', 1)
            ->limit(3,1)
            ->order_by('id desc ')
            ->get();
登录后复制


注意:limit的参数顺序与SQL中的顺序是相反的,第一个参数表示显示的条数,第二个参数表示跳过的条数

不同查询条件下where语句的写法

[code]where('name', 'mary')或where('name =', 'mary'):表示查询条件是name字段值是mary
where(array('name'=>'mary', 'id >'=>'1'));:表示查询条件有两个,name字段值是mary并且id字段值是1
登录后复制

通过last_query()方法可以获得通过连贯操作,由AR拼装的SQL语句

[code]$this->db->last_query();
登录后复制

通过AR只能执行比较简单的查询,如果是复杂查询,建议使用$this->db->query($sql, $data)
进行查询

选择数据

下面的函数帮助你构建 SQL SELECT语句。

备注:如果你正在使用 PHP5,你可以在复杂情况下使用链式语法。本页面底部有具体描述。

[code]$this->db->get();
登录后复制

运行选择查询语句并且返回结果集。可以获取一个表的全部数据。

[code]$query = $this->db->get('mytable');
// Produces: SELECT * FROM mytable
登录后复制

第二和第三个参数允许你设置一个结果集每页纪录数(limit)和结果集的偏移(offset)

[code]$query = $this->db->get('mytable', 10, 20);
// Produces: SELECT * FROM mytable LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)
登录后复制


注意:第二参数是每页纪录数,第三个参数是偏移

你会注意到上面的函数由一个变量$query
执行,这个$query
可以用来显示结果集。

[code]$query = $this->db->get('mytable');
foreach ($query->result() as $row)
{
    echo $row->title;
}
[code]$this->db->get_where();
登录后复制


跟上面的函数一样,只是它允许你在函数的第二个参数那里添加一个 where 从句,从而不用使用 db->where() 这个函数:

[code]$query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);
登录后复制

注意: get_where() 在以前的版本中写作 getwhere(),这是已经过时的用法,现已从代码中移除 getwhere()。

[code]$this->db->select();
登录后复制

允许你在SQL查询中写 SELECT 部分:

[code]$this->db->select('title, content, date');
$query = $this->db->get('mytable');
// Produces: SELECT title, content, date FROM mytable
登录后复制

注意: 如果你要查询表中的所有行,你可以不用写这个函数。省略后,CodeIgniter 会认为你要查询全部行(SELECT *)。

$this->db->select()
登录后复制
[code]$this->db->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid', FALSE); 
$query = $this->db->get('mytable');
登录后复制

关联数组方式:

[code]$array = array('title' => $match, 'page1' => $match, 'page2' => $match);
$this->db->like($array); 
// WHERE title LIKE '%match%' AND page1 LIKE '%match%' AND page2 LIKE '%match%'
$this->db->or_like();
登录后复制

本函数与上面那个函数几乎完全相同,唯一的区别是多个实例之间是用 OR 连接起来的:

[code]$this->db->like('title', 'match');
$this->db->or_like('body', $match); 
// WHERE title LIKE '%match%' OR body LIKE '%match%'
登录后复制


说明: or_like() 曾经被称为 orlike(), 后者已经过时,现已从代码中移除 orlike()。

[code]$this->db->not_like();
登录后复制

本函数与 like() 几乎完全相同,唯一的区别是它生成 NOT LIKE 语句:

[code]$this->db->not_like('title', 'match');
// WHERE title NOT LIKE '%match%
$this->db->or_not_like();
登录后复制

本函数与 not_like() 几乎完全相同,唯一的区别是多个实例之间是用 OR 连接起来的:

[code]$this->db->like('title', 'match');
$this->db->or_not_like('body', 'match'); 
// WHERE title LIKE '%match%' OR body NOT LIKE '%match%'
$this->db->group_by();
登录后复制


允许你编写查询语句中的 GROUP BY 部分:

[code]$this->db->group_by("title"); 
// 生成: GROUP BY title
登录后复制

你也可以把多个值作为数组传递过去:

[code]$this->db->group_by(array("title", "date")); 
// 生成: GROUP BY title, date
登录后复制

说明: group_by() 曾经被称为 groupby(), 后者已经过时,现已从代码中移除 groupby()。

[code]$this->db->distinct();
登录后复制

为查询语句添加 “DISTINCT” 关键字:

[code]$this->db->distinct();
$this->db->get('table');
// 生成: SELECT DISTINCT * FROM table
$this->db->having();
登录后复制


允许你为你的查询语句编写 HAVING 部分。有两种语法形式,一个或两个参数都可以:

[code]$this->db->having('user_id = 45'); 
// 生成: HAVING user_id = 45
$this->db->having('user_id', 45); 
// 生成: HAVING user_id = 45
你也可以把多个值通过数组传递过去:
[code]$this->db->having(array('title =' => 'My Title', 'id <' => $id)); 
// 生成: HAVING title = 'My Title', id < 45
登录后复制


如果你正在使用一个由CodeIgniter进行转义保护的数据库,为了避免内容转义,你可以传递可选的第三个参数,并将其设置为FALSE。

[code]$this->db->having('user_id', 45); 
// 生成: HAVING `user_id` = 45 (在诸如MySQL等数据库中) 
$this->db->having('user_id', 45, FALSE); 
// 生成: HAVING user_id = 45
$this->db->or_having();
登录后复制

与 having() 函数几乎完全一样,唯一的区别是多个子句之间是用 “OR” 分隔的。

[code]$this->db->order_by();
登录后复制

帮助你设置一个 ORDER BY 子句。第一个参数是你想要排序的字段名。第二个参数设置结果的顺序,可用的选项包括 asc (升序)或 desc(降序), 或 random(随机)。

[code]$this->db->order_by("title", "desc"); 
// 生成: ORDER BY title DESC
登录后复制

你也可以在第一个参数中传递你自己的字符串:

[code]$this->db->order_by('title desc, name asc'); 
// 生成: ORDER BY title DESC, name ASC
登录后复制

或者,多次调用本函数就可以排序多个字段。

[code]$this->db->order_by("title", "desc");
$this->db->order_by("name", "asc"); 
// 生成: ORDER BY title DESC, name ASC
登录后复制


说明: order_by() 曾经被称为 orderby(), 后者已经过时,现已从代码中移除 orderby()。

说明: 目前 Oracle 和 MSSQL 的驱动还不支持随机排序,将被默认设置为 ‘ASC’(升序)。

[code]$this->db->limit();
登录后复制

限制查询所返回的结果数量:

[code]$this->db->limit(10);
// 生成: LIMIT 10
登录后复制

第二个参数设置的是结果偏移量。

[code]$this->db->limit(10, 20);
// 生成: LIMIT 20, 10 (仅限MySQL中。其它数据库有稍微不同的语法)
$this->db->count_all_results();
登录后复制

允许你获得某个特定的Active Record查询所返回的结果数量。可以使用Active Record限制函数,例如 where(),or_where()
, like(), or_like() 等等。范例:

[code]echo $this->db->count_all_results('my_table');
// 生成一个整数,例如 25
$this->db->like('title', 'match');
$this->db->from('my_table');
echo $this->db->count_all_results();
// 生成一个整数,例如 17
登录后复制

插入数据

[code]$this->db->insert();
登录后复制


生成一条基于你所提供的数据的SQL插入字符串并执行查询。你可以向函数传递 数组 或一个 对象。下面是一个使用数组的例子:

[code]$data = array(
               'title' => 'My title' ,
               'name' => 'My Name' ,
               'date' => 'My date'
            );
$this->db->insert('mytable', $data); 
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
登录后复制

第一个参数包含表名,第二个是一个包含数据的关联数组。

下面是一个使用对象的例子:

[code]/*
    class Myclass {
        var $title = 'My Title';
        var $content = 'My Content';
        var $date = 'My Date';
    }
*/
$object = new Myclass;
$this->db->insert('mytable', $object); 
// Produces: INSERT INTO mytable (title, content, date) VALUES ('My Title', 'My Content', 'My Date')
登录后复制


第一个参数包含表名,第二个是一个对象。(原文有错:The first parameter will contain the table name, the second is an associative array of values.)

注意: 所有的值已经被自动转换为安全查询。

[code]$this->db->set();
登录后复制

本函数使您能够设置inserts(插入)或updates(更新)值。

它可以用来代替那种直接传递数组给插入和更新函数的方式:

[code]$this->db->set('name', $name); 
$this->db->insert('mytable'); 
// 生成: INSERT INTO mytable (name) VALUES ('{$name}')
登录后复制

如果你多次调用本函数,它们会被合理地组织起来,这取决于你执行的是插入操作还是更新操作:

[code]$this->db->set('name', $name);
$this->db->set('title', $title);
$this->db->set('status', $status);
$this->db->insert('mytable');
登录后复制


set() 也接受可选的第三个参数($escape),如果此参数被设置为 FALSE,就可以阻止数据被转义。为了说明这种差异,这里将对 包含转义参数 和 不包含转义参数 这两种情况的 set() 函数做一个说明。

[code]$this->db->set('field', 'field+1', FALSE);
$this->db->insert('mytable'); 
// 得到 INSERT INTO mytable (field) VALUES (field+1)
$this->db->set('field', 'field+1');
$this->db->insert('mytable'); 
// 得到 INSERT INTO mytable (field) VALUES ('field+1')
登录后复制

你也可以将一个关联数组传递给本函数:

[code]$array = array('name' => $name, 'title' => $title, 'status' => $status);
$this->db->set($array);
$this->db->insert('mytable');
登录后复制

或者一个对象也可以:

[code]/*
    class Myclass {
        var $title = 'My Title';
        var $content = 'My Content';
        var $date = 'My Date';
    }
*/
$object = new Myclass;
$this->db->set($object);
$this->db->insert('mytable');
登录后复制

更新数据

[code]$this->db->update();
登录后复制

根据你提供的数据生成并执行一条update(更新)语句。你可以将一个数组或者对象传递给本函数。这里是一个使用数组的例子:

[code]$data = array(
               'title' => $title,
               'name' => $name,
               'date' => $date
            );
$this->db->where('id', $id);
$this->db->update('mytable', $data); 
// 生成:
// UPDATE mytable 
// SET title = '{$title}', name = '{$name}', date = '{$date}'
// WHERE id = $id
登录后复制

或者你也可以传递一个对象:

[code]/*
    class Myclass {
        var $title = 'My Title';
        var $content = 'My Content';
        var $date = 'My Date';
    }
*/
$object = new Myclass;
$this->db->where('id', $id);
$this->db->update('mytable', $object); 
// 生成:
// UPDATE mytable 
// SET title = '{$title}', name = '{$name}', date = '{$date}'
// WHERE id = $id
登录后复制

说明: 所有值都会被自动转义,以便生成安全的查询。

你会注意到

$this->db->where()
登录后复制
[code]$this->db->update('mytable', $data, "id = 4");
登录后复制

或者是一个数组:

[code]$this->db->update('mytable', $data, array('id' => $id));


在进行更新时,你还可以使用上面所描述的 $this->db->set() 函数。

删除数据

[code]$this->db->delete();
登录后复制

生成并执行一条DELETE(删除)语句。

[code]$this->db->delete('mytable', array('id' => $id)); 
// 生成:
// DELETE FROM mytable 
// WHERE id = $id
登录后复制

第一个参数是表名,第二个参数是where子句。你可以不传递第二个参数,使用 where() 或者 or_where() 函数来替代它:

[code]$this->db->where('id', $id);
$this->db->delete('mytable'); 
// 生成:
// DELETE FROM mytable 
// WHERE id = $id
登录后复制


如果你想要从一个以上的表中删除数据,你可以将一个包含了多个表名的数组传递给delete()函数。

[code]$tables = array('table1', 'table2', 'table3');
$this->db->where('id', '5');
$this->db->delete($tables);
登录后复制

如果你想要删除表中的全部数据,你可以使用 truncate() 函数,或者 empty_table() 函数。

[code]$this->db->empty_table();
登录后复制

生成并执行一条DELETE(删除)语句。

[code] $this->db->empty_table('mytable'); 
// 生成
// DELETE FROM mytable
$this->db->truncate();
登录后复制


生成并执行一条TRUNCATE(截断)语句。

[code]$this->db->from('mytable'); 
$this->db->truncate(); 
// 或 
$this->db->truncate('mytable'); 
// 生成:
// TRUNCATE mytable
登录后复制

说明: 如果 TRUNCATE 命令不可用,truncate() 将会以 “DELETE FROM table” 的方式执行。

链式方法

链式方法允许你以连接多个函数的方式简化你的语法。考虑一下这个范例:

[code]$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
$query = $this->db->get();
登录后复制

 以上就是CodeIgniter学习笔记 Item5--CI中的AR的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系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脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

XREAL 创始人徐驰:苹果让大家看到空间计算的未来,我们努力让大家看到空间计算的现在 XREAL 创始人徐驰:苹果让大家看到空间计算的未来,我们努力让大家看到空间计算的现在 Jun 02, 2024 pm 07:55 PM

XREAL在空间计算新品发布会上推出了一款全新产品——XREALBeamPro,售价1299元起。据官方介绍,XREALBeamPro是一款将2D应用逐渐释放到3D空间的计算终端,配备XREALAR眼镜,将构成“消费级AR空间计算完全体”,并将用户从手机侧的迁移成本降至最低。在设计上,XREALBeamPro看起来像智能手机,但并非手机产品,而是一款配备触控显示屏的空间计算终端。官方对其的定位为“像Phone一样的AR空间计算终端”。在发布会上,XREAL创始人兼CEO徐驰对BeamPro的能力

如何在CodeIgniter中实现自定义中间件 如何在CodeIgniter中实现自定义中间件 Jul 29, 2023 am 10:53 AM

如何在CodeIgniter中实现自定义中间件引言:在现代的Web开发中,中间件在应用程序中起着至关重要的作用。它们可以用来执行在请求到达控制器之前或之后执行一些共享的处理逻辑。CodeIgniter作为一个流行的PHP框架,也支持中间件的使用。本文将介绍如何在CodeIgniter中实现自定义中间件,并提供一个简单的代码示例。中间件概述:中间件是一种在请求

如何使用PHP构建AR/VR应用 如何使用PHP构建AR/VR应用 Jun 11, 2023 pm 07:22 PM

随着AR(增强现实)和VR(虚拟现实)的发展,这两项技术已经成为了创新和体验的重要组成部分。随着PHP作为网络编程语言的流行,使得PHP成为了开发AR/VR应用的一种可行性选择。本文将介绍如何使用PHP构建AR/VR应用。1、了解AR和VR技术在开始创建AR/VR应用程序之前,我们需要了解不同的技术和库。AR技术允许虚拟对象或信息与现实世界的环境进行交互。V

微软探索使用微透镜阵列进行大范围主射线角操纵的AR/VR专利 微软探索使用微透镜阵列进行大范围主射线角操纵的AR/VR专利 Sep 30, 2023 pm 09:29 PM

(映维网Nweon2023年09月26日)微软认为,MicroLED具有体积小、重量轻、亮度高、封装密度高的特点,可能特别适合用于需要高分辨率、小尺寸和轻重量的头戴式显示器。在名为”Microlensesprovidingwiderangechiefrayanglemanipulationforapaneldisplay“的专利申请中,微软介绍了一种为面板显示提供大范围主射线角操纵的微透镜,以及配置所述微透镜阵列的显示系统。其中,阵列中的每个微透镜对应于面板显示器的各自像素。微透镜的配置根据它们

CodeIgniter中间件:加速应用程序的响应速度和页面渲染 CodeIgniter中间件:加速应用程序的响应速度和页面渲染 Jul 28, 2023 pm 06:51 PM

CodeIgniter中间件:加速应用程序的响应速度和页面渲染概述:随着网络应用程序的复杂性和交互性不断增长,开发人员需要使用更加高效和可扩展的解决方案来提高应用程序的性能和响应速度。CodeIgniter(CI)是一种基于PHP的轻量级框架,提供了许多有用的功能,其中之一就是中间件。中间件是在请求到达控制器之前或之后执行的一系列任务。这篇文章将介绍如何使用

莫界科技首次登场CES,领先引领AR创新潮流! 莫界科技首次登场CES,领先引领AR创新潮流! Jan 14, 2024 pm 09:06 PM

1月9日-12日,超过4000家展商聚集在消费电子“春晚”CES上。作为消费级AR领域的创新企业,莫界科技首次参展CES,全面展示了中国AR企业在核心器件、整机方案和定制化服务方面的强大实力。在莫界展台上,展示的基于双目树脂衍射光波导+MicroLED的AR眼镜,引起了众多观众的兴趣,他们纷纷试戴并体验了其功能。这款AR眼镜具备了许多实用的特点。首先,佩戴者可以透过眼镜镜片实时查看文字内容,这使得阅读更加方便。其次,眼镜内置了麦克风,可以收集语音信息,并通过即时翻译功能将其转化为指定语言的文本,

在CodeIgniter框架中使用数据库查询构建器(Query Builder)的方法 在CodeIgniter框架中使用数据库查询构建器(Query Builder)的方法 Jul 28, 2023 pm 11:13 PM

在CodeIgniter框架中使用数据库查询构建器(QueryBuilder)的方法引言:CodeIgniter是一个轻量级的PHP框架,它提供了许多功能强大的工具和库,方便开发人员进行Web应用程序开发。其中一个令人印象深刻的功能是数据库查询构建器(QueryBuilder),它提供了一种简洁而强大的方法来构建和执行数据库查询语句。本文将介绍如何在Co

NTT QONOQ Devices 推出适用于智能手机的 Mirza 无线 XR 眼镜 NTT QONOQ Devices 推出适用于智能手机的 Mirza 无线 XR 眼镜 Sep 09, 2024 pm 06:30 PM

NTT QONOQ Devices 推出了适用于智能手机的 Mirza 无线 XR 眼镜,使用户无需再纠结电线。该眼镜可以在现实空间中显示虚拟 AR 内容,例如 Pokemon Go 或在大型虚拟显示器上显示手机内容

See all articles