1 教程-内容提要
1.1 CodeIgniter3.1教程——开始
1.2 加载静态内容
1.3 读取新闻条目
1.4 创建新闻条目
2 常规主题
2.1 CodeIgniter URL
2.2 控制器
2.3 保留名称
2.4 视图
2.5 模型
2.6 辅助函数
2.7 使用 CodeIgniter 类库
2.8 创建类库
2.9 使用 CodeIgniter 驱动器
2.10 创建驱动器
2.11 创建核心系统类
2.12 创建附属类
2.13 钩子 - 扩展框架核心
2.14 自动加载资源
2.15 公共函数
2.16 兼容性函数
2.17 URI 路由
2.18 错误处理
2.19 网页缓存
2.20 程序分析
2.21 以 CLI 方式运行
2.22 管理你的应用程序
2.23 处理多环境
2.24 在视图文件中使用 PHP 替代语法
2.25 安全
2.26 PHP 开发规范
3 类库参考
3.1 基准测试类
3.2 缓存驱动器
3.3 日历类
3.4 购物车类
3.5 配置类
3.6 Email 类
3.7 加密类(废弃)
3.8 加密类(新版)
3.9 文件上传类
3.10 表单验证类
3.11 FTP 类
3.12 图像处理类
3.13 输入类
3.14 Javascript 类
3.15 语言类
3.16 加载器类
3.17 迁移类
3.18 输出类
3.19 分页类
3.20 模板解析类
3.21 安全类
3.22 Session 类
3.23 HTML 表格类
3.24 引用通告类
3.25 排版类
3.26 单元测试类
3.27 URI 类
3.28 用户代理类
3.29 XML-RPC 与 XML-RPC 服务器类
3.30 Zip 编码类
4 数据库参考
4.1 数据库快速入门: 示例代码
4.2 数据库配置
4.3 连接你的数据库
4.4 查询
4.5 生成查询结果
4.6 查询辅助函数
4.7 查询构造器类
4.8 事务
4.9 数据库元数据
4.10 自定义函数调用
4.11 查询缓存
4.12 数据库工厂类
4.13 数据库工具类
4.14 数据库驱动器参考
5 辅助函数参考
5.1 数组辅助函数
5.2 验证码辅助函数
5.3 Cookie 辅助函数
5.4 日期辅助函数
5.5 目录辅助函数
5.6 下载辅助函数
5.7 邮件辅助函数
5.8 文件辅助函数
5.9 表单辅助函数
5.10 HTML 辅助函数
5.11 Inflector 辅助函数
5.12 语言辅助函数
5.13 数字辅助函数
5.14 路径辅助函数
5.15 安全辅助函数
5.16 表情辅助函数(废弃)
5.17 字符串辅助函数
5.18 文本辅助函数
5.19 排版辅助函数
5.20 URL 辅助函数
5.21 XML 辅助函数

数据库工厂类

2017-12-03 20:02:08
linefo
523
最后编辑:linefo 于 2017-12-03 21:11:32

数据库工厂类

数据库工厂类提供了一些方法来帮助你管理你的数据库。

初始化数据库工厂类

重要

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

加载数据库工厂类的代码如下:

$this->load->dbforge()

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

$this->myforge = $this->load->dbforge($this->other_db, TRUE);

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

注解

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

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

$this->dbforge->some_method();

创建和删除数据库

$this->dbforge->create_database('db_name')

用于创建指定数据库,根据成败返回 TRUE 或 FALSE

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

$this->dbforge->drop_database('db_name')

用于删除指定数据库,根据成败返回 TRUE 或 FALSE

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

创建和删除数据表

创建表涉及到这样几件事:添加字段、添加键、修改字段。CodeIgniter 提供了这几个方法。

添加字段

字段通过一个关联数组来创建,数组中必须包含一个 'type' 索引,代表字段的数据类型。 例如,INT、VARCHAR、TEXT 等,有些数据类型(例如 VARCHAR)还需要加一个 'constraint' 索引。

$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.
$fields = array(
    'blog_id' => array(
        'type' => 'INT',
        'constraint' => 5,
        'unsigned' => TRUE,
        'auto_increment' => TRUE
    ),
    'blog_title' => array(
        'type' => 'VARCHAR',
        'constraint' => '100',
  'unique' => TRUE,
    ),
    'blog_author' => array(
        'type' =>'VARCHAR',
        'constraint' => '100',
        'default' => 'King of Town',
    ),
    'blog_description' => array(
        'type' => 'TEXT',
        'null' => TRUE,
    ),
);

字段定义好了之后,就可以在调用 create_table() 方法的后面使用 $this->dbforge->add_field($fields); 方法来添加字段了。

$this->dbforge->add_field()

添加字段方法的参数就是上面介绍的数组。

使用字符串参数添加字段

如果你非常清楚的知道你要添加的字段,你可以使用字段的定义字符串来传给 add_field() 方法

$this->dbforge->add_field("label varchar(100) NOT NULL DEFAULT 'default label'");

注解

Passing raw strings as fields cannot be followed by add_key() calls on those fields.

注解

多次调用 add_field() 将会累积。

创建 id 字段

创建 id 字段和创建其他字段非常不一样,id 字段将会自动定义成类型为 INT(9) 的自增主键。

$this->dbforge->add_field('id');
// gives id INT(9) NOT NULL AUTO_INCREMENT

添加键

通常来说,表都会有键。这可以使用 $this->dbforge->add_key('field') 方法来实现。 第二个参数可选,可以将其设置为主键。注意 add_key() 方法必须紧跟在 create_table() 方法的后面。

包含多列的非主键必须使用数组来添加,下面是 MySQL 的例子。

$this->dbforge->add_key('blog_id', TRUE);
// gives PRIMARY KEY `blog_id` (`blog_id`)

$this->dbforge->add_key('blog_id', TRUE);
$this->dbforge->add_key('site_id', TRUE);
// gives PRIMARY KEY `blog_id_site_id` (`blog_id`, `site_id`)

$this->dbforge->add_key('blog_name');
// gives KEY `blog_name` (`blog_name`)

$this->dbforge->add_key(array('blog_name', 'blog_label'));
// gives KEY `blog_name_blog_label` (`blog_name`, `blog_label`)

创建表

字段和键都定义好了之后,你可以使用下面的方法来创建表:

$this->dbforge->create_table('table_name');
// gives CREATE TABLE table_name

第二个参数设置为 TRUE ,可以在定义中添加 "IF NOT EXISTS" 子句。

$this->dbforge->create_table('table_name', TRUE);
// gives CREATE TABLE IF NOT EXISTS table_name

你还可以指定表的属性,例如 MySQL 的 ENGINE

$attributes = array('ENGINE' => 'InnoDB');
$this->dbforge->create_table('table_name', FALSE, $attributes);
// produces: CREATE TABLE `table_name` (...) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

注解

除非你指定了 CHARACTER SETCOLLATE 属性,create_table() 方法 默认会使用配置文件中 char_setdbcollat 的值(仅针对 MySQL)。

删除表

执行一个 DROP TABLE 语句,可以选择添加 IF EXISTS 子句。

// Produces: DROP TABLE table_name
$this->dbforge->drop_table('table_name');

// Produces: DROP TABLE IF EXISTS table_name
$this->dbforge->drop_table('table_name',TRUE);

重命名表

执行一个重命名表语句。

$this->dbforge->rename_table('old_table_name', 'new_table_name');
// gives ALTER TABLE old_table_name RENAME TO new_table_name

修改表

给表添加列

$this->dbforge->add_column()

add_column() 方法用于对现有数据表进行修改,它的参数和上面介绍的 字段数组一样。

$fields = array(
    'preferences' => array('type' => 'TEXT')
);
$this->dbforge->add_column('table_name', $fields);
// Executes: ALTER TABLE table_name ADD preferences TEXT

如果你使用 MySQL 或 CUBIRD ,你可以使用 AFTER 和 FIRST 语句来为新添加的列指定位置。

例如:

// Will place the new column after the `another_field` column:
$fields = array(
    'preferences' => array('type' => 'TEXT', 'after' => 'another_field')
);

// Will place the new column at the start of the table definition:
$fields = array(
    'preferences' => array('type' => 'TEXT', 'first' => TRUE)
);

从表中删除列

$this->dbforge->drop_column()

用于从表中删除指定列。

$this->dbforge->drop_column('table_name', 'column_to_drop');

修改表中的某个列

$this->dbforge->modify_column()

该方法的用法和 add_column() 一样,只是它用于对现有的列进行修改,而不是添加新列。 如果要修改列的名称,你可以在列的定义数组中添加一个 "name" 索引。

$fields = array(
    'old_name' => array(
        'name' => 'new_name',
        'type' => 'TEXT',
    ),
);
$this->dbforge->modify_column('table_name', $fields);
// gives ALTER TABLE table_name CHANGE old_name new_name TEXT

类参考

class CI_DB_forge
add_column($table[, $field = array()[, $_after = NULL]])
参数:
  • $table (string) -- Table name to add the column to
  • $field (array) -- Column definition(s)
  • $_after (string) -- Column for AFTER clause (deprecated)
返回:

TRUE on success, FALSE on failure

返回类型:

bool

给表添加列。用法参见 给表添加列

add_field($field)
参数:
  • $field (array) -- Field definition to add
返回:

CI_DB_forge instance (method chaining)

返回类型:

CI_DB_forge

添加字段到集合,用于创建一个表。用法参见 添加字段

add_key($key[, $primary = FALSE])
参数:
  • $key (array) -- Name of a key field
  • $primary (bool) -- Set to TRUE if it should be a primary key or a regular one
返回:

CI_DB_forge instance (method chaining)

返回类型:

CI_DB_forge

添加键到集合,用于创建一个表。用法参见:添加键

create_database($db_name)
参数:
  • $db_name (string) -- Name of the database to create
返回:

TRUE on success, FALSE on failure

返回类型:

bool

创建数据库。用法参见:创建和删除数据库

create_table($table[, $if_not_exists = FALSE[, array $attributes = array()]])
参数:
  • $table (string) -- Name of the table to create
  • $if_not_exists (string) -- Set to TRUE to add an 'IF NOT EXISTS' clause
  • $attributes (string) -- An associative array of table attributes
返回:

TRUE on success, FALSE on failure

返回类型:

bool

创建表。用法参见:创建表

drop_column($table, $column_name)
参数:
  • $table (string) -- Table name
  • $column_name (array) -- The column name to drop
返回:

TRUE on success, FALSE on failure

返回类型:

bool

删除某个表的字段。用法参见:从表中删除列

drop_database($db_name)
参数:
  • $db_name (string) -- Name of the database to drop
返回:

TRUE on success, FALSE on failure

返回类型:

bool

删除数据库。用法参见:创建和删除数据库

drop_table($table_name[, $if_exists = FALSE])
参数:
  • $table (string) -- Name of the table to drop
  • $if_exists (string) -- Set to TRUE to add an 'IF EXISTS' clause
返回:

TRUE on success, FALSE on failure

返回类型:

bool

删除表。用法参见:删除表

modify_column($table, $field)
参数:
  • $table (string) -- Table name
  • $field (array) -- Column definition(s)
返回:

TRUE on success, FALSE on failure

返回类型:

bool

修改表的某个列。用法参见:修改表中的某个列

rename_table($table_name, $new_table_name)
参数:
  • $table (string) -- Current of the table
  • $new_table_name (string) -- New name of the table
返回:

TRUE on success, FALSE on failure

返回类型:

bool

重命名表。用法参见:重命名表