# 数据库实用工具

数据库实用工具类包含了帮助你管理数据库的方法。

## 初始化实用工具类

按照以下方式加载实用工具类：

    $dbutil = \Config\Database::utils();

你也可以将另一数据库组传递给 DB Utility 加载器，以防你要管理的数据库不是默认的：

    $dbutil = \Config\Database::utils('group_name');

在上述示例中，我们将数据库组名称作为第一参数传递了进去。

## 使用数据库实用工具

### 检索数据库名称列表

返回一个包含数据库名称的数组：

    $dbutil = \Config\Database::utils();

    $dbs = $dbutil->listDatabases();

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

### 判断数据库是否存在

有时候，我们需要知道特定的数据库是否存在。 返回一个布尔值 `true`/`false`。使用示例：

    $dbutil = \Config\Database::utils();

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

备注

将 `database_name` 替换为你正在查找的数据库名称。此方法区分大小写。

### 优化数据表

允许你使用第一参数中特定的表名来优化一个表。根据成功或失败返回 `true`/`false`：

    $dbutil = \Config\Database::utils();

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

备注

并非所有的数据库平台都支持表优化。它主要用于 MySQL。

### 优化数据库

允许你优化 DB 类当前连接的数据库。成功返回包含数据库状态消息的数组，失败返回 `false`：

    $dbutil = \Config\Database::utils();

    $result = $dbutil->optimizeDatabase();

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

备注

并非所有的数据库平台都支持数据库优化。它主要用于 MySQL。

### 将查询结果导出为 CSV 文件

允许你生成一个来自查询结果的 CSV 文件。方法的第一参数必须包含你的查询结果对象。示例：

    $db     = db_connect();
    $dbutil = \Config\Database::utils();

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

    echo $dbutil->getCSVFromResult($query);

第二、第三和第四参数分别允许你设置分隔符、换行和封闭字符。默认的分隔符是逗号，`"\n"` 用作新行，双引号用作封闭符。示例：

    $db     = db_connect();
    $dbutil = \Config\Database::utils();

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

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

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

重要

这个方法不会为你写入 CSV 文件。它仅创建 CSV 布局。如果你需要写入文件，使用 `write_file()` 辅助函数。

### 将查询结果导出为 XML 文档

通过此方法，你可以生成一个来自查询结果的 XML 文件。第一参数需要是一个查询结果对象，第二参数可能包含一个可选的配置参数数组。示例：

    <?php

    $db     = db_connect();
    $dbutil = \Config\Database::utils();

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

    $config = [
        'root'    => 'root',
        'element' => 'element',
        'newline' => "\n",
        'tab'     => "\t",
    ];

    echo $dbutil->getXMLFromResult($query, $config);

当 `mytable` 有 `id` 和 `name` 列时，将得到以下 xml 结果:

    <root>
        <element>
            <id>1</id>
            <name>bar</name>
        </element>
    </root>

重要

这个方法不会为你写入 XML 文件。它仅仅创建 XML 布局。如果你需要写入文件，使用 `write_file()` 辅助函数。