0

0

CodeIgniter学习笔记 Item4--CI中的数据库操作

黄舟

黄舟

发布时间:2016-12-29 10:16:05

|

1714人浏览过

|

来源于php中文网

原创

ci数据库配置文件是/application/config/database.php

[code]// 可以创建多个数据库连接配置,通过$active_group选择使用哪个数据库连接
$active_group = 'default';

// 配置是否加载查询构建类,默认为TRUE,通常保持默认值
$query_builder = TRUE;

// 数据库连接配置,可以有多个连接配置,索引需要区分开
$db['default'] = array(
    'dsn'    => '',
    'hostname' => 'localhost',        // ip
    'username' => 'root',            // 用户名
    'password' => '123456',            // 密码
    'database' => 'workplatform',    // 数据库名称
    'dbdriver' => 'mysqli',            // 使用什么库访问数据库
                                    // 目前可以支持cubrid,ibase,mssql,mysql,mysqli,oci8
                                    // odbc, pdo, postgre, sqlite, sqlite3, sqlsrv
    'dbprefix' => '',                // 表前缀
    'pconnect' => FALSE,
    'db_debug' => TRUE,
    'cache_on' => FALSE,            // 是否启用查询缓存
    'cachedir' => '',                // 查询缓存目录
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',                // 交换表前缀,表前缀的替换写法
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE

在使用数据库前,需要使用装载器来加载数据库对象

[code]$this->load->database();

装载完成后,$this->db就是这个数据库对象,以后的数据操作都是调用这个对象的方法进行

首先定义SQL语句:

[code]$sql = 'SELECT * FROM user';

再调用db对象的query方法进行查询

[code]$result = $this->db->query($sql);

返回值$result是一个对象,通过调用它的方法可以返回不同形式的结果,例如:调用它的result()方法获取查询结果

[code]$users = $result->result();

此时,

$users

是一个对象数组,或者调用它的result_array()方法获取关联数组查询结果

[code]$users = $result->result_array();
调用row()方法以对象形式返回第一条记录或第几条记录
[code]$users = $result->row();
但是,如果SQL是增、删、修改语句,query()方法将返回TRUE或FALSE,此时通过db的方法可以获取执行的结果,比如:
[code]$this->db->affected_rows();    // 获取影响的行数
$this->db->insert_id();        // 获取插入数据的id

在执行数据库操作前,由于不知道在查询前

$this->db

是否已经生成,因此都需要调用

$this->load->database()

方法,通过修改/application/config/autoload.php文件,可以让CI自动加载数据库

[code]$autoload['libraries'] = array('database');

如果SQL语句中的变量过多,会影响语句的编写,这时可以采用占位符来解决

[code]$data[0] = 'dj';
$data[1] = '123456';
$sql = "INSERT INTO user (account, password, usertype, username) VALUES ('1231', ?, '1', ?)";
$result = $this->db->query($sql, $data);
传入的数组中的元素会依次取代SQL中的?,生成实际的SQL语句

备注:在测试这段代码时,由于错误的在字段名两侧加上了’,造成一直报错,引以为戒.

连接你的数据库

有两种方法连接数据库:

自动连接 

“自动连接” 特性将在每一个页面加载时自动实例化数据库类。要启用“自动连接”, 可在 application/config/autoload.php 中的 library 数组里添加 database:

[code]$autoload['libraries'] = array('database');
手动连接 

如果你只有一部分页面需要数据库连接,你可以在那些有需要的函数里手工添加 如下代码来连接数据库,或者写在类的构造函数里,让整个类都可以访问:

[code]$this->load->database();

如果 database() 函数没有指定第一个参数,它将使用数据库配置文件中 指定的组连接数据库。对大多数人而言,这是首选方案。

可用的参数 

数据库连接值,用数组或DSN字符串传递;

[code]TRUE/FALSE (boolean) - 是否返回连接ID(参考下文的“连接多数据库”);
TRUE/FALSE (boolean) - 是否启用查询构造器类,默认为 TRUE 。
手动连接到数据库 

这个函数的第一个参数是可选的,被用来从你的配置文件中 指定一个特定的数据库组,甚至可以使用没有在配置文件中定义的 数据库连接值。下面是例子:

从你的配置文件中选择一个特定分组:
[code]$this->load->database('group_name');
其中 group_name 是你的配置文件中连接组的名字。

连接一个完全手动指定的数据库,可以传一个数组参数:
[code]$config['hostname'] = 'localhost';
$config['username'] = 'myusername';
$config['password'] = 'mypassword';
$config['database'] = 'mydatabase';
$config['dbdriver'] = 'mysqli';
$config['dbprefix'] = '';
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = '';
$config['char_set'] = 'utf8';
$config['dbcollat'] = 'utf8_general_ci';
$this->load->database($config);

注解

对于 PDO 驱动,你应该使用 $config[‘dsn’] 取代 ‘hostname’ 和 ‘database’ 参数:

[code]$config['dsn'] = 'mysql:host=localhost;dbname=mydatabase';

或者你可以使用数据源名称(DSN,Data Source Name)作为参数,DSN 的格式必须类似于下面这样:

[code]$dsn = 'dbdriver://username:password@hostname/database';
$this->load->database($dsn);

当用 DSN 字符串连接时,要覆盖默认配置,可以像添加查询字符串一样添加配置变量。

万知
万知

万知: 你的个人AI工作站

下载
[code]$dsn = 'dbdriver://username:password@hostname/database?char_set=utf8&dbcollat=utf8_general_ci&cache_on=true&cachedir=/path/to/cache';
$this->load->database($dsn);

注意:将 “group_one” 和 “group_two” 修改为你要连接的组名称 (或者像上面介绍的那样传入连接值数组)

第二个参数 TRUE 表示函数将返回数据库对象。

注解

当你使用这种方式连接数据库时,你将通过你的对象名来执行数据库命令, 而不再是通过这份指南中通篇介绍的,就像下面这样的语法了:

[code]$this->db->query();
$this->db->result();
etc...

取而代之的,你将这样执行数据库命令:

[code]$DB1->query();
$DB1->result();
etc...

注解

如果你只是需要切换到同一个连接的另一个不同的数据库,你没必要创建 独立的数据库配置,你可以像下面这样切换到另一个数据库:

[code]$this->db->db_select($database2_name);
重新连接 / 保持连接有效 

当你在处理一些重量级的 PHP 操作时(例如处理图片),如果超过了数据库的超时值, 你应该考虑在执行后续查询之前先调用 reconnect() 方法向数据库发送 ping 命令, 这样可以优雅的保持连接有效或者重新建立起连接。

[code]$this->db->reconnect();

手动关闭连接 

虽然 CodeIgniter 可以智能的管理并自动关闭数据库连接,你仍可以用下面的方法显式的关闭连接:

[code]$this->db->close();

查询

[code]$this->db->query();

要提交一个查询,用以下函数:

[code]$this->db->query('YOUR QUERY HERE');

query() 函数以object(对象)的形式返回一个数据库结果集. 当使用 “read” 模式来运行查询时, 你可以使用“显示你的结果集”来显示查询结果; 当使用 “write” 模式来运行查询时, 将会仅根据执行的成功或失败来返回 TRUE 或 FALSE. 当你需要将返回的结果赋值给一个自定义变量的时候, 你可以这样操作:

[code]$query = $this->db->query('YOUR QUERY HERE');

$this->db->simple_query();


这是一个简化版本的 $this->db->query() 函数. 它仅返回 True(bool) 和 False(bool) 以表示查询成功与失败. 它将不会返回查询数据集,无法设置查询计时器(设置环境变量),无法编译绑定数据,不能够存储查询诊断信息。简单地说,他是一个用于提交查询的函数,对于大多数用户而言并不会使用到它。

手工添加数据库前缀 

如果你需要为一个数据库手工添加前缀,你可以使用以下步骤。

[code]$this->db->dbprefix('tablename');
// outputs prefix_tablename

保护标识符 

在许多数据库中,保护表(table)和字段(field)的名称是明智的,例如在MySQL中使用反引号。Active Record的查询都已被自动保护,然而,如果您需要手动保护一个标识符,您也可以这样:

[code]$this->db->protect_identifiers('table_name');

这个函数也会给你的表名添加一个前缀,它假定在你的数据库配置文件中已指定了一个前缀。可通过将第二个参数设置为TRUE (boolen) 启用前缀:

[code]$this->db->protect_identifiers('table_name', TRUE);
转义查询 

将数据转义以后提交到你的数据库是非常好的安全做法,CodeIgniter 提供了 3 个函数帮助你完成这个工作。

$this->db->escape()

这个函数将会确定数据类型,以便仅对字符串类型数据进行转义。并且,它也会自动把数据用单引号括起来,所以你不必手动添加单引号,用法如下: 

[code]$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
$this->db->escape_str()

此函数将忽略数据类型对传入数据进行转义。更多时候你将使用上面的函数而不是这个。这个函数的使用方法是: 

[code]$sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";

$this->db->escape_like_str() This method should be used when strings are to be used in LIKE conditions so that LIKE wildcards ('%', '_') in the string are also properly escaped. 
$search = '20% raise';
$sql = "SELECT id FROM table WHERE column LIKE '%".$this->db->escape_like_str($search)."%'";

封装查询 

封装,通过让系统为你组装各个查询语句,能够简化你的查询语法。参加下面的范例:

[code]$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; 

$this->db->query($sql, array(3, 'live', 'Rick'));

查询语句中的问号会自动被查询函数中位于第二个参数位置的数组中的值所替代。

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

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

8

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

8

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

1

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

17

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

19

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CodeIgniter3(CI3)基础教程(全)
CodeIgniter3(CI3)基础教程(全)

共37课时 | 4.7万人学习

Codeigniter 3 中文开发手册
Codeigniter 3 中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号