数据库工具类

数据库工具类提供了一些方法用于帮助你管理你的数据库。

初始化工具类

重要

由于工具类依赖于数据库驱动器,为了初始化工具类,你的数据库驱动器必须已经运行。

加载工具类的代码如下:

  1. $this->load->dbutil();

如果你想管理的不是你正在使用的数据库,你还可以传另一个数据库对象到数据库工具类的加载方法:

  1. $this->myutil = $this->load->dbutil($this->other_db, TRUE);

上例中,我们通过第一个参数传递了一个自定义的数据库对象,第二个参数表示方法将返回 dbutil 对象,而不是直接赋值给 $this->dbutil

注解

两个参数都可以独立使用,如果你只想传第二个参数,可以将第一个参数置空。

一旦初始化结束,你就可以使用 $this->dbutil 对象来访问它的方法:

  1. $this->dbutil->some_method();

使用数据库工具类

获取数据库名称列表

返回一个包含所有数据库名称的列表:

  1. $dbs = $this->dbutil->list_databases();
  2.  
  3. foreach ($dbs as $db)
  4. {
  5. echo $db;
  6. }

判断一个数据库是否存在

有时我们需要判断某个数据库是否存在,可以使用该方法。方法返回布尔值 TRUE/FALSE 。例如:

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

注解

使用你自己的数据库名替换 database_name ,该方法区分大小写。

优化表

根据你指定的表名来优化表,根据成败返回 TRUE 或 FALSE

  1. if ($this->dbutil->optimize_table('table_name'))
  2. {
  3. echo 'Success!';
  4. }

注解

不是所有的数据库平台都支持表优化,通常使用在 MySQL 数据库上。

修复表

根据你指定的表名来修复表,根据成败返回 TRUE 或 FALSE

  1. if ($this->dbutil->repair_table('table_name'))
  2. {
  3. echo 'Success!';
  4. }

注解

不是所有的数据库平台都支持表修复。

优化数据库

允许你优化数据库类当前正在连接的数据库。返回一个数组,包含数据库状态信息,失败时返回 FALSE 。

  1. $result = $this->dbutil->optimize_database();
  2.  
  3. if ($result !== FALSE)
  4. {
  5. print_r($result);
  6. }

注解

不是所有的数据库平台都支持数据库优化,通常使用在 MySQL 数据库上。

将查询结果导出到 CSV 文档

允许你从查询结果生成 CSV 文档,第一个参数必须是查询的结果对象。例如:

  1. $this->load->dbutil();
  2.  
  3. $query = $this->db->query("SELECT * FROM mytable");
  4.  
  5. echo $this->dbutil->csv_from_result($query);

第二、三、四个参数分别为分隔符、换行符和每个字段包围字符,默认情况下,分隔符为逗号,换行符为 "n" ,包围字符为双引号。例如:

  1. $delimiter = ",";
  2. $newline = "\r\n";
  3. $enclosure = '"';
  4.  
  5. echo $this->dbutil->csv_from_result($query, $delimiter, $newline, $enclosure);

重要

该方法并不写入 CSV 文档,它只是简单的返回 CSV 内容,如果你需要写入到文件中,你可以使用 文件辅助函数

将查询结果导出到 XML 文档

允许你从查询结果生成 XML 文档,第一个参数为查询的结果对象,第二个参数可选,可以包含一些的配置参数。例如:

  1. $this->load->dbutil();
  2.  
  3. $query = $this->db->query("SELECT * FROM mytable");
  4.  
  5. $config = array (
  6. 'root' => 'root',
  7. 'element' => 'element',
  8. 'newline' => "\n",
  9. 'tab' => "\t"
  10. );
  11.  
  12. echo $this->dbutil->xml_from_result($query, $config);

重要

该方法并不写入 XML 文档,它只是简单的返回 XML 内容,如果你需要写入到文件中,你可以使用 文件辅助函数

备份你的数据库

数据备份说明

允许你备份完整的数据库或指定的表。备份的数据可以压缩成 Zip 或 Gzip 格式。

注解

该功能只支持 MySQL 和 Interbase/Firebird 数据库。

注解

对于 Interbase/Firebird 数据库,只能提供一个备份文件名参数。

$this->dbutil->backup('db_backup_filename');

注解

限于 PHP 的执行时间和内存限制,备份非常大的数据库应该不行。如果你的数据库非常大,你可以直接使用命令行进行备份,如果你没有 root 权限的话,让你的管理员来帮你备份。

使用示例

  1. // Load the DB utility class
  2. $this->load->dbutil();
  3.  
  4. // Backup your entire database and assign it to a variable
  5. $backup = $this->dbutil->backup();
  6.  
  7. // Load the file helper and write the file to your server
  8. $this->load->helper('file');
  9. write_file('/path/to/mybackup.gz', $backup);
  10.  
  11. // Load the download helper and send the file to your desktop
  12. $this->load->helper('download');
  13. force_download('mybackup.gz', $backup);

设置备份参数

备份参数为一个数组,通过第一个参数传递给 backup() 方法,例如:

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

备份参数说明

参数默认值 选项描述
tablesempty arrayNone你要备份的表,如果留空将备份所有的表。
ignoreempty arrayNone你要忽略备份的表。
formatgzipgzip, zip, txt导出文件的格式。
filenamethe current date/timeNone备份文件名。如果你使用了 zip 压缩这个参数是必填的。
add_dropTRUETRUE/FALSE是否在导出的 SQL 文件里包含 DROP TABLE 语句
add_insertTRUETRUE/FALSE是否在导出的 SQL 文件里包含 INSERT 语句
newline"\n""\n", "\r", "\r\n"导出的 SQL 文件使用的换行符
foreign_key_checksTRUETRUE/FALSE导出的 SQL 文件中是否继续保持外键约束

类参考

  • _class _CI_DB_utility
    • backup([$params = array()])

参数:

  1. - **$params** (_array_) -- An associative array of options返回:

raw/(g)zipped SQL query string返回类型:string

根据用户参数执行数据库备份。

  • databaseexists($databasename)

参数:

  1. - **$database_name** (_string_) -- Database name返回:

TRUE if the database exists, FALSE otherwise返回类型:bool

判断数据库是否存在。

  • list_databases()

返回:Array of database names found返回类型:array

获取所有的数据库名称列表。

  • optimize_database()

返回:Array of optimization messages or FALSE on failure返回类型:array

优化数据库。

  • optimizetable($tablename)

参数:

  1. - **$table_name** (_string_) -- Name of the table to optimize返回:

Array of optimization messages or FALSE on failure返回类型:array

优化数据库表。

  • repairtable($tablename)

参数:

  1. - **$table_name** (_string_) -- Name of the table to repair返回:

Array of repair messages or FALSE on failure返回类型:array

修复数据库表。

  • csvfrom_result($query[, $delim = ', '[, $newline = "n"[, $enclosure = '"'_]]])

参数:

  1. - **$query** (_object_) -- A database result object
  2. - **$delim** (_string_) -- The CSV field delimiter to use
  3. - **$newline** (_string_) -- The newline character to use
  4. - **$enclosure** (_string_) -- The enclosure delimiter to use返回:

The generated CSV file as a string返回类型:string

将数据库结果对象转换为 CSV 文档。

  • xmlfrom_result($query[, $params = array()_])

参数:

  1. - **$query** (_object_) -- A database result object
  2. - **$params** (_array_) -- An associative array of preferences返回:

The generated XML document as a string返回类型:string

将数据库结果对象转换为 XML 文档。