作者:烨竹
目录结构:
数据库配置文件: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()])根据用户参数执行数据库备份