搜索
首页php教程PHP开发CodeIgniter学习笔记 Item4--CI中的数据库操作

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 字符串连接时,要覆盖默认配置,可以像添加查询字符串一样添加配置变量。

[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工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

禅工作室 13.0.1

禅工作室 13.0.1

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

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。