CodeIgniter数据库相关操作以及相关源码阅读

作者:烨竹

目录结构:

CodeIgniter数据库相关操作以及相关源码阅读_第1张图片

数据库配置文件:application / config / database.php
不多做介绍:自己去看源码或者相关网站http://codeigniter.org.cn/user_guide/database/configuration.html

其余没有指向的都指向DB.driver.php
DB.driver.php数据库运行的核心驱动文件,所以几乎说有的操作都涉及到这个文件的函数;

连接数据库:

主要涉及三个文件,数据库配置文件(数据库能否连接成功的关键),Db.php实例化数据库类(里面有连接到数据库是否成功的逻辑判断),DB.driver.php里面这是连接数据库的相关操作;重连,关闭连接等等如果涉及到自动连接还可以加一个文件 application/config/autoload.php。具体见:源码或者相关网站http://codeigniter.org.cn/user_guide/database/connecting.html

下面为相关操作:
自动连接:application/config/autoload.php 中的 library 数组里添加 database

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

手动连接:

$this->load->database();
1.数据库连接值,用数组或DSN字符串传递;
      $dsn = 'dbdriver://username:password@hostname/database?char_set=utf8&dbcollat=utf8_general_ci&cache_on=true&cachedir=/path/to/cache';
      $this->load->database($dsn);
2. TRUE/FALSE (boolean) - 是否返回连接ID(参考下文的“连接多数据库”);
3.TRUE/FALSE (boolean) - 是否启用查询构造器类,默认为 TRUE 

重新连接/持续连接/关闭连接:

$this->db->reconnect();
$this->db->db_pconnect();
$this->db->close();

数据库驱动器参考:

DB_driver.php
具体详见:源码或者相关网站http://codeigniter.org.cn/user_guide/database/db_driver_reference.html

下面为相关操作:
DB_driver.php源码
initialize()
初始化数据库配置,建立对数据库的连接

db_connect($persistent = TRUE)
建立对数据库的连接
返回值取决于当前使用的数据库驱动器,例如 mysqli 实例将会返回 'mysqli' 驱动器

db_pconnect()
建立对数据库的连接,使用持久连接

reconnect()
如果超过服务器的超时时间都没有发送任何查询请求, 使用该方法可以让数据库连接保持有效,或重新连接数据库

db_select([$database = ''])
切换到某个数据库。

error()
获取最近一次发生的错误,使用 error() 方法可以得到一个包含错误代码和错误消息的数组

platform()
当前使用的数据库平台(mysql、mssql 等)

version()
数据库版本。

query($sql[, $binds = FALSE[, $return_object = NULL]])
执行一个 SQL 查询。
如果是读类型的查询,执行 SQL 成功后将返回结果对象。
有以下几种可能的返回值:
如果是写类型的查询,执行成功返回 TRUE
执行失败返回 FALSE
如果是读类型的查询,执行成功返回 CI_DB_result 对象

simple_query($sql)
query() 方法的简化版,当你只需要简单的执行一个查询,并不关心查询的结果时, 可以使用该方法。

trans_off()
实时的禁用事务。

trans_strict([$mode = TRUE])
启用或禁用事务的严格模式。
在严格模式下,如果你正在运行多组事务,只要有一组失败,所有组都会被回滚。
如果禁用严格模式,那么每一组都被视为独立的组,这意味着其中一组失败不会影响其他的组。

trans_start([$test_mode = FALSE])
开启一个事务。

trans_complete()
结束事务。

trans_status()
获取事务的状态,用来判断事务是否执行成功。

trans_begin()开始事物

trans_rollback()回滚事物

trans_commit()提交事物

compile_binds($sql, $binds)
根据绑定的参数值编译 SQL 查询。

is_write_type($sql)
判断查询是写类型(INSERT、UPDATE、DELETE),还是读类型(SELECT)。

elapsed_time([$decimals = 6])
计算查询所消耗的时间。

total_queries()
返回当前已经执行了多少次查询。

last_query()
返回上一次执行的查询。

escape($str)
根据输入数据的类型进行数据转义,包括布尔值和空值。

escape_str($str[, $like = FALSE])
转义字符串。
警告
转义 LIKE 字符串。
和 escape_str() 方法类似,但同时也对 LIKE 语句中的 % 和 _ 通配符进行转义。

重要
escape_like_str()方法使用'!' (感叹号)为LIKE条件转义特殊字符。由于此方法会转义部分字符串,您将自行换行,因此无法自动添加ESCAPE'!'你的条件,所以你必须手动做到这一点。

primary($table)
获取一个表的主键。
注解
如果数据库不支持主键检测,将假设第一列就是主键。

count_all([$table = ''])
返回表中的总记录数。

list_tables([$constrain_by_prefix = FALSE])
返回当前数据库的所有表。

table_exists($table_name)
判断某个数据库表是否存在。

list_fields($table)
返回某个表的所有字段名。

field_exists($field_name, $table_name)
判断某个字段是否存在。

field_data($table)
获取某个表的所有字段信息。

escape_identifiers($item)
对 SQL 标识符进行转义,例如列名、表名、关键字。

insert_string($table, $data)
生成 INSERT 语句。

update_string($table, $data, $where)
生成 UPDATE 语句。

call_function($function)
使用一种平台无关的方式执行一个原生的 PHP 函数。

cache_set_path([$path = ''])
设置缓存路径。

cache_on()
启用数据库结果缓存。

cache_off()
禁用数据库结果缓存。

cache_delete([$segment_one = ''[, $segment_two = '']])
删除特定 URI 的缓存文件。

cache_delete_all()
删除所有缓存文件。

close()
关闭数据库的连接。

display_error([$error = ''[, $swap = ''[, $native = FALSE]]])
显示一个错误信息,并终止脚本执行。
错误信息是使用 application/views/errors/error_db.php 文件中的模板来显示。

protect_identifiers($item[, $prefix_single = FALSE[, $protect_identifiers = NULL[, $field_exists = TRUE]]])
根据配置的 dbprefix 参数,给列名或表名(可能是表别名)添加一个前缀。

数据库查询操作:

主要涉及到两个文件:DB_driver.php ,DB_query_builder.php两个文件;
query,simple_query,protect_identifiers,escape相关,error()来自DB.driver.php;dbprefixset_dbprefix则是来自DB_query_builder.php

下面为相关操作:

提交一个查询:

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

简化查询

  if ($this->db->simple_query('YOUR QUERY'))
{
    echo "Success!";
}
else
{
    echo "Query failed!";
}

指定数据库前缀:

$this->db->dbprefix('tablename');

保护标识符
手工开启保护表名和字段名

$this->db->protect_identifiers('table_name', TRUE);第二个参数表示是否开启前缀

转义查询
在提交数据到你的数据库之前,确保先对其进行转义是个非常不错的做法escape() escape_str() escape_like_str()

查询绑定 :::::所有的值会被自动转义,生成安全的查询语句

$sql = "SELECT * FROM some_table WHERE id IN ? AND status = ? AND author = ?";
$this->db->query($sql, array(array(3, 6), 'live', 'Rick'));

错误处理
要获取最近一次发生的错误,使用 error() 方法可以得到一个包含错误代码和错误消息的数组

  if ( ! $this->db->simple_query('SELECT `example_field` FROM `example_table`'))
{
    $error = $this->db->error(); // Has keys 'code' and 'message'
}

生成查询结果:

有专门的类来自于DB_result.php
具体详见:源码或者相关网站http://codeigniter.org.cn/user_guide/database/results.html

下面为具体用法:

结果数组
result() 方法:以对象数组形式返回查询结果,如果查询失败返回空数组

$query = $this->db->query("YOUR QUERY");

foreach ($query->result() as $row)
{
    echo $row->title;
    echo $row->name;
    echo $row->body;
}

result_array() 方法:以 一个纯粹的数组 形式返回查询结果,如果无结果,则返回一个空数组

    $query = $this->db->query("YOUR QUERY");

    foreach ($query->result_array() as $row)
    {
        echo $row['title'];
        echo $row['name'];
        echo $row['body'];
    }

结果行
row() 方法:返回单独一行结果;如果你的查询不止一行结果,它只返回第一行;返回的结果是 对象 形式;第一个参数表示返回特定行的数据;第二个参数把结果转换成某个类的类名

    $query = $this->db->query("SELECT * FROM users LIMIT 1;");
    $row = $query->row(0, 'User');
    
    echo $row->name; // access attributes
    echo $row->reverse_name(); // or methods defined on the 'User' class

row_array()除了返回结果是一个数组而不是一个对象之外,其他的和上面的 row() 方法完全一样

unbuffered_row() 方法:这个方法和 row() 方法一样返回单独一行结果,但是它不会预读取所有的结果数据到内存中。 如果你的查询结果不止一行,它将返回当前一行,并通过内部实现的指针来移动到下一行

自定义结果对象
custom_result_object()将整个结果集作为所请求类的实例数组返回。唯一的参数是要实例化的类的名称

custom_row_object()从查询结果中返回一行。第一个参数是结果的行数。第二个参数是要实例化的类名称。

结果辅助方法:
num_rows() 方法该方法返回查询结果的行数

  $query = $this->db->query('SELECT * FROM my_table');

  echo $query->num_rows();

NUM_FIELDS()方法返回查询结果的字段数(列数)

free_result()该方法释放掉查询结果所占的内存,并删除结果的资源标识
data_seek()这个方法用来设置下一个结果行的内部指针,它只有在和unbuffered_row()方法一起使用才有效果

  $ query  =  $ this - > db - > query ('SELECT`field_name` FROM`table_name`' ); 
  $ query - > data_seek (5 );  //跳过前5行
  $ row  =  $ query - > unbuffered_row ();

DB_result.php源码
num_rows() 方法该方法返回查询结果的行数

result() 方法:以对象数组形式返回查询结果,如果查询失败返回空数组

custom_result_object($class_name)以行数组形式返回查询结果,其中每行都是指定类的实例

result_array() 方法:以 一个纯粹的数组 形式返回查询结果,如果无结果,则返回一个空数组

result_object()以行数组形式返回查询结果,其中每行都是一个类型的对象

row() 方法:返回单独一行结果;如果你的查询不止一行结果

set_row($key[, $value = NULL])返回结果集中的下一行

custom_row_object从查询结果中返回一行

row_object()将请求的结果行作为stdClass类型的对象返回

row_array ([ $ n = 0 ] )以关联数组形式返回请求的结果行

first_row ([ $ type ='object' ] )返回结果集中的第一行

last_row ([ $ type ='object' ] )返回结果集中的最后一行

next_row ([ $ type ='object' ] )返回结果集中的下一行

previous_row ([ $ type ='object' ] )返回结果集中的前一行

unbuffered_row ([ $ type ='object' ] )获取下一个结果行并以请求的形式返回

num_fields ()返回结果集中的字段数

list_fields ()返回包含结果集中字段名称的数组

field_data()生成一个包含字段元数据的stdClass对象数组

free_result()释放结果集

data_seek ([ $ n = 0 ] )将内部结果行指针移动到所需的偏移量

查询辅助函数:

来自:DB_driver.php
具体详见:源码或者相关网站http://codeigniter.org.cn/user_guide/database/helpers.html

相关操作

执行查询的信息
$this->db->last_query()该方法返回上一次执行的查询语句
将数据库配置文件中的save_queries设置为FALSE可以让这个方法无效

数据库的信息
$this->db->count_all()该方法用于获取数据表的总行数,第一个参数为表名
$this->db->platform()该方法输出你正在使用的数据库平台(MySQL,MS SQL,Postgres 等)
$this->db->version()该方法输出你正在使用的数据库版本

让你的查询更简单
$this->db->insert_string()这个方法简化了INSERT 语句的书写,它返回一个正确格式化的INSERT 语句;第一个参数为表名,第二个参数是一个关联数组,表示待插入的数据;
$this->db->update_string()这个方法简化了UPDATE 语句的书写,它返回一个正确格式化的UPDATE 语句第一个参数是表名,第二个参数是一个关联数组,表示待更新的数据,第三个参数是个WHERE 子句

查询构造器类:

优点:使用较少的代码来在数据库中 获取、新增或更新数据
系统会自动对数据 进行转义,所以它还能提供更安全的查询

来自DB_Query.Builder.php
具体详见:源码或者相关网站http://codeigniter.org.cn/user_guide/database/query_builder.html

相关操作

查询操作

查询
$this->db->get()
该方法执行 SELECT 语句并返回查询结果,可以得到一个表的所有数据:第二和第三个参数用于设置 LIMIT 子句($this->db->get_compiled_select()编译 SELECT 查询并返回查询的 SQL 语句)

$query = $this->db->get('mytable', 10, 20);
    
    // Executes: SELECT * FROM mytable LIMIT 20, 10
    // (in MySQL. Other databases have slightly different syntax)
  //显示结果
  foreach ($query->result() as $row)
  {
      echo $row->title;
  }

$this->db->get_where();跟get()一样,只是它允许你在函数的第二个参数那里添加一个 where 从句

$query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);

$this->db->select();SQL查询中写 SELECT 部分

$this->db->select('title, content, date');

$query = $this->db->get('mytable');

// Produces: SELECT title, content, date FROM mytable

$this->db->select_max()和$this->db->select_min()编写查询语句中的 SELECT MAX(field) db->select_min()部分($this->db->select_avg();$this->db->select_sum();编译 上面两个的 查询并返回查询的 SQL 语句)第二个参数chong
$this->db->from();指定查询中的FROM部分
$this->db->join();指定查询中的JOIN部分
如果你需要指定 JOIN 的类型,你可以通过本函数的第三个参数来指定。可选项包括:left, right, outer, inner, left outer, 以及 right outer.

$this->db->where();指定查询中的WHERE 子句部分
说明: 传递给本函数的所有值都会被自动转义,以便生成安全的查询
$this->db->or_where();指定查询中的WHERE ...OR...子句部分
$this->db->where_in(); 指定查询中的WHERE field IN ('item', 'item').子句部分
$this->db->or_where_in();指定查询中的WHERE field IN ('item', 'item') ...OR...子句部分

$this->db->like();
$this->db->or_like();
$this->db->not_like();
$this->db->or_not_like();

$this->db->group_by();

$this->db->distinct();为查询语句添加 "DISTINCT" 关键字:

$this->db->having();
$this->db->or_having();

$this->db->order_by();

$this->db->limit();

$this->db->count_all_results();允许你获得某个特定的Active Record查询所返回的结果数量

插入数据

$this->db->insert();
生成一条基于你所提供的数据的SQL插入字符串并执行查询。你可以向函数传递 数组 或一个 对象;
第一个参数包含表名,第二个是一个包含数据的关联数组

$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')

$this->db->insert_batch();生成一条基于你所提供的数据的SQL插入字符串并执行查询
$this->db->set();本函数使您能够设置inserts(插入)或updates(更新)值

$this->db->set('name', $name);
$this->db->set('title', $title);
$this->db->set('status', $status);
$this->db->insert('mytable');

更新数据

$this->db->update();

$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

$this->db->update_batch();生成一条update命令是以你提供的数据为基础的,并执行查询

删除数据

$this->db->delete();生成并执行一条DELETE(删除)语句,第一个参数是表名,第二个参数是where子句

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

// 生成:
// DELETE FROM mytable 
// WHERE id = $id

$this->db->empty_table();生成并执行一条DELETE(删除)语句
$this->db->truncate();生成并执行一条TRUNCATE(截断)语句

链式方法

链式方法允许你以连接多个函数的方式简化你的语法

$this->db
     ->select('title')
     ->from('mytable')
     ->where('id', $id)
     ->limit(10, 20);

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

查询构造器缓存

将查询的某个特定部分保存(或 "缓存")起来, 以便在你的脚本执行之后重用;支持缓存的语句有: select, from, join, where, like, group_by, having, order_by

$this->db->start_cache()
如需开启缓存必须先调用此方法,所有支持的查询类型(见下文)都会被存储起来供以后使用。
$this->db->stop_cache()
此方法用于停止缓存。
$this->db->flush_cache()
此方法用于清空缓存。

$this->db->start_cache();
$this->db->select('field1');
$this->db->stop_cache();
$this->db->get('tablename');
//Generates: SELECT `field1` FROM (`tablename`)

$this->db->select('field2');
$this->db->get('tablename');
//Generates:  SELECT `field1`, `field2` FROM (`tablename`)

$this->db->flush_cache();
$this->db->select('field2');
$this->db->get('tablename');
//Generates:  SELECT `field2` FROM (`tablename`)

事物相关:

来自:DB_driver.php
具体详见:源码或者相关网站http://codeigniter.org.cn/user_guide/database/transactions.html

相关操作

运行事务

$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->query('AND YET ANOTHER QUERY...');
$this->db->trans_complete();

默认开启;禁用严格模式

    $this->db->trans_strict(FALSE);

错误处理
config/database.php 中启用错误报告(db_debug = TRUE)
根据以下代码调试:

$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->trans_complete();

if ($this->db->trans_status() === FALSE)
{
    // generate an error... or use the log_message() function to log your error
}

禁用事务$this->db->trans_off()
当事务被禁用时,你的查询会自动提交,就跟没有使用事务一样, trans_start() 和 trans_complete() 等方法调用也将被忽略

测试模式(Test Mode)所有 查询都被回滚,不管成功与否

$this->db->trans_start(TRUE); // Query will be rolled back
$this->db->query('AN SQL QUERY...');
$this->db->trans_complete();

手工运行事务
手动运行事务时,请务必使用 $this->db->trans_begin() 方法, 而不是 $this->db->trans_start() 方法

$this->db->trans_begin();

$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->query('AND YET ANOTHER QUERY...');

if ($this->db->trans_status() === FALSE)
{
    $this->db->trans_rollback();
}
else
{
    $this->db->trans_commit();
}

表元数据:

来自:DB_driver.php
具体详见:源码或者相关网站http://codeigniter.org.cn/user_guide/database/metadata.html

相关操作

列出数据库的所有表:$this->db->list_tables();
该方法返回一个包含你当前连接的数据库的所有表名称的数组

检测表是否存在$this->db->table_exists();

列出表的所有列$this->db->list_fields()

检测表中是否存在某字段$this->db->field_exists()

获取字段的元数据$this->db->field_data()
该方法返回一个包含了字段信息的对象数组

自定义函数调用:

来自:DB_driver.php
具体详见:源码或者相关网站http://codeigniter.org.cn/userguide2/database/call_function.html

相关操作

$this->db->call_function();

这个函数可以允许你用一个独立的方法来调用一些 CodeIgniter 中没有定义的PHP数据库函数; mysql_get_client_info() 这个 CodeIgniter 中并没有定义的函数, 你可以这样:

    $this->db->call_function('get_client_info');

任何你需要添加的其它参数都放在第一个参数后面.

$this->db->call_function('some_function', $param1, $param2, etc..);

通常情况下, 你会需要提供一个 connection ID 或是一个 result ID, connection ID 可以这样来获得:

$this->db->conn_id;

result ID 则包含在一个结果集(result object)中, 你可以这样来获得它:

$query = $this->db->query("SOME QUERY");

$query->result_id;

查询缓存:

涉及:DB_driver.php; DB_cache.php database.php
具体详见:源码或者相关网站
http://codeigniter.org.cn/user_guide/database/caching.html

启用缓存
当缓存启用时,本类会被数据库驱动自动加载
启动缓存的步骤
1.在服务器上创建一个可写的目录以便保存缓存文件;
2.通过文件 application/config/database.php 中的 cachedir 参数设置其目录路径;
3.通过将文件 application/config/database.php 中的 cache_on 参数设置为 TRUE, 也可以用下面的方法手动配置

手工启用/禁用缓存:$this->db->cache_on() / $this->db->cache_off()
删除特定页面的缓存文件:$this->db->cache_delete()
清除所有的缓存文件:$this->db->cache_delete_all()

下面列出的方法是无法在缓存的结果对象上使用的:
num_fields()
field_names()
field_data()
free_result()
同时,result_id 和 conn_id 这两个 id 也无法使用,因为这两个 id 只适用于实时的数据库操作

数据库维护类:

来自:DB_dbforge.php
具体详见:源码或者相关网站
http://codeigniter.org.cn/userguide2/database/forge.html

相关操作

初始化
加载和访问数据库维护类

$this->load->dbforge()
$this->dbforge->some_function()

创建和删除数据库

  if ($this->dbforge->create_database('my_db'))
{
    echo 'Database created!';
}


if ($this->dbforge->drop_database('my_db'))
{
    echo 'Database deleted!';
}

创建和删除数据表
创建表涉及到这样几件事:添加字段、添加键、修改字段
添加字段

$fields = array(
    'users' => array(
        'type' => 'VARCHAR',
        'constraint' => '100',
    ),
);
// will translate to "users VARCHAR(100)" when the field is added.

键值对:
unsigned/true : 在字段定义中生成 "UNSIGNED"
default/value : 在字段定义中生成一个默认值
null/true : 在字段定义中生成 "NULL" ,如果没有这个,字段默认为 "NOT NULL"
auto_increment/true : 在字段定义中生成自增标识,注意数据类型必须支持这个,例如整型
unique/true : to generate a unique key for the field definition.

添加字段$this->dbforge->add_field()
添加建$this->dbforge->add_key('field')
创建表$this->dbforge->create_table('table_name', TRUE);第二个参数设置为 TRUE ,可以在定义中添加 "IF NOT EXISTS" 子句
删除表 $this->dbforge->drop_table('table_name',TRUE);
重命名表$this->dbforge->rename_table('old_table_name', 'new_table_name');

修改表
添加一个或多个字段$this->dbforge->add_column()
用于从表中移除一个列$this->dbforge->drop_column()
本函数的用途是修改一个已存在的列,而不是添加一个新的$this->dbforge->modify_column()

DB_forge.php源码
create_database($db_name)创建数据表
drop_database($db_name)删除数据表
add_key($key[, $primary = FALSE])添加键到集合,用于创建一个表
add_field($field)添加字段到集合,用于创建一个表
create_table($table[, $if_not_exists = FALSE[, array $attributes = array()]])创建表
drop_table($table_name[, $if_exists = FALSE])删除表
rename_table($table_name, $new_table_name)重命名表
add_column($table[, $field = array()[, $_after = NULL]])给表添加列
drop_column($table, $column_name)删除某个表的字段
modify_column($table, $field)修改表的某个列

数据库工具类:

来自DB_utility.php
具体详见:源码或者相关网站
http://codeigniter.org.cn/user_guide/database/utilities.html

相关操作

初始化
加载和访问数据库工具类

    $this->load->dbutil()
    $this->dbutil->some_function()

使用数据库工具类
获取数据库名称列表

$dbs = $this->dbutil->list_databases();

foreach ($dbs as $db)
{
    echo $db;
}      

判断某个数据库是否存在

if ($this->dbutil->database_exists('database_name'))
{
    // some code...
}

优化表

  if ($this->dbutil->optimize_table('table_name'))
  {
      echo 'Success!';
  }

修复表

if ($this->dbutil->repair_table('table_name'))
{
    echo 'Success!';
}

优化数据库

$result = $this->dbutil->optimize_database();

if ($result !== FALSE)
{
    print_r($result);
}

查询结果导出到 CSV 文档第一个参数必须是查询的结果对象,第二、三、四个参数分别为分隔符、换行符和每个字段包围字符,默认情况下,分隔符为逗号,换行符为 "n" , 包围字符为双引号

$this->load->dbutil();

$query = $this->db->query("SELECT * FROM mytable");

$delimiter = ",";
$newline = "\r\n";
$enclosure = '"';

echo $this->dbutil->csv_from_result($query, $delimiter, $newline, $enclosure);

查询结果导出到 XML 文档

$this->load->dbutil();

$query = $this->db->query("SELECT * FROM mytable");

$config = array (
    'root'      => 'root',
    'element'   => 'element',
    'newline'   => "\n",
    'tab'       => "\t"
);

echo $this->dbutil->xml_from_result($query, $config);

备份数据库

// Load the DB utility class
$this->load->dbutil();

$prefs = array(
    'tables'    => array('table1', 'table2'),   // Array of tables to backup.
    'ignore'    => array(),         // List of tables to omit from the backup
    'format'    => 'txt',           // gzip, zip, txt
    'filename'  => 'mybackup.sql',      // File name - NEEDED ONLY WITH ZIP FILES
    'add_drop'  => TRUE,            // Whether to add DROP TABLE statements to backup file
    'add_insert'    => TRUE,            // Whether to add INSERT data to backup file
    'newline'   => "\n"             // Newline character used in backup file
);


// Backup your entire database and assign it to a variable
$this->dbutil->backup($prefs);

// Load the file helper and write the file to your server
$this->load->helper('file');
write_file('/path/to/mybackup.gz', $backup);

// Load the download helper and send the file to your desktop
$this->load->helper('download');
force_download('mybackup.gz', $backup);

备份参数说明:

参数 默认值 选项 描述
tables empty array None 你要备份的表,如果留空将备份所有的表。
ignore empty array None 你要忽略备份的表。
format gzip gzip, zip, txt 导出文件的格式。
filename the current date/time None 备份文件名。如果你使用了 zip 压缩这个参数是必填的。
add_drop TRUE TRUE/FALSE 是否在导出的 SQL 文件里包含 DROP TABLE 语句
add_insert TRUE TRUE/FALSE 是否在导出的 SQL 文件里包含 INSERT 语句
newline "\n" "\n", "\r", "\r\n" 导出的 SQL 文件使用的换行符
foreign_key_checks TRUE TRUE/FALSE 导出的 SQL 文件中是否继续保持外键约束

DB_utility.php源码

list_databases()获取所有的数据库名称列表

database_exists($database_name)判断数据库是否存在

optimize_table($table_name)优化数据库表

repair_table($table_name)修复数据库表

csv_from_result($query[, $delim = ', '[, $newline = "n"[, $enclosure = '"']]])将数据库结果对象转换为 CSV 文档

backup([$params = array()])根据用户参数执行数据库备份

你可能感兴趣的:(CodeIgniter数据库相关操作以及相关源码阅读)