数据库驱动器参考

这是一个平台无关的数据库实现基类,该类不会被直接调用,而是通过特定的数据库适配器类来继承和实现该类。

关于数据库驱动器,已经在其他几篇文档中介绍过,这篇文档将作为它们的一个参考。

重要

并不是所有的方法都被所有的数据库驱动器所支持,当不支持的时候,有些方法可能会失败(返回 FALSE)。

  • _class _CI_DB_driver
    • initialize()

返回:TRUE on success, FALSE on failure返回类型:bool

初始化数据库配置,建立对数据库的连接。

  • dbconnect($persistent = TRUE_)

参数:

  1. - **$persistent** (_bool_) -- Whether to establish a persistent connection or a regular one返回:

Database connection resource/object or FALSE on failure返回类型:mixed

建立对数据库的连接。

注解

返回值取决于当前使用的数据库驱动器,例如 mysqli 实例将会返回 'mysqli' 驱动器。

  • db_pconnect()

返回:Database connection resource/object or FALSE on failure返回类型:mixed

建立对数据库的连接,使用持久连接。

注解

该方法其实就是调用 db_connect(TRUE) 。

  • reconnect()

返回:TRUE on success, FALSE on failure返回类型:bool

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

  • dbselect([$database = ''_])

参数:

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

TRUE on success, FALSE on failure返回类型:bool

切换到某个数据库。

  • dbset_charset($charset_)

参数:

  1. - **$charset** (_string_) -- Character set name返回:

TRUE on success, FALSE on failure返回类型:bool

设置客户端字符集。

  • platform()

返回:Platform name返回类型:string

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

  • version()

返回:The version of the database being used返回类型:string

数据库版本。

  • query($sql[, $binds = FALSE[, $return_object = NULL]])

参数:

  1. - **$sql** (_string_) -- The SQL statement to execute
  2. - **$binds** (_array_) -- An array of binding data
  3. - **$return_object** (_bool_) -- Whether to return a result object or not返回:

TRUE for successful "write-type" queries, CI_DB_result instance (method chaining) on "query" success, FALSE on failure返回类型:mixed

执行一个 SQL 查询。

如果是读类型的查询,执行 SQL 成功后将返回结果对象。

有以下几种可能的返回值:

  • 如果是写类型的查询,执行成功返回 TRUE
  • 执行失败返回 FALSE
  • 如果是读类型的查询,执行成功返回 CI_DB_result 对象
  • simplequery($sql_)

参数:

  1. - **$sql** (_string_) -- The SQL statement to execute返回:

Whatever the underlying driver's "query" function returns返回类型:mixed

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

  • affected_rows()

返回:Number of rows affected返回类型:int

Returns the number of rows changed by the last executed query.

Useful for checking how much rows were created, updated or deletedduring the last executed query.

  • transstrict([$mode = TRUE_])

参数:

  1. - **$mode** (_bool_) -- Strict mode flag返回类型:

void

启用或禁用事务的严格模式。

在严格模式下,如果你正在运行多组事务,只要有一组失败,所有组都会被回滚。

如果禁用严格模式,那么每一组都被视为独立的组,这意味着其中一组失败不会影响其他的组。

  • trans_off()

返回类型:void

实时的禁用事务。

  • transstart([$testmode = FALSE])

参数:

  1. - **$test_mode** (_bool_) -- Test mode flag返回:

TRUE on success, FALSE on failure返回类型:bool

开启一个事务。

  • trans_complete()

返回:TRUE on success, FALSE on failure返回类型:bool

结束事务。

  • trans_status()

返回:TRUE if the transaction succeeded, FALSE if it failed返回类型:bool

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

  • compilebinds($sql, $binds_)

参数:

  1. - **$sql** (_string_) -- The SQL statement
  2. - **$binds** (_array_) -- An array of binding data返回:

The updated SQL statement返回类型:string

根据绑定的参数值编译 SQL 查询。

  • iswrite_type($sql_)

参数:

  1. - **$sql** (_string_) -- The SQL statement返回:

TRUE if the SQL statement is of "write type", FALSE if not返回类型:bool

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

  • elapsedtime([$decimals = 6_])

参数:

  1. - **$decimals** (_int_) -- The number of decimal places返回:

The aggregate query elapsed time, in microseconds返回类型:string

计算查询所消耗的时间。

  • total_queries()

返回:The total number of queries executed返回类型:int

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

  • last_query()

返回:The last query executed返回类型:string

返回上一次执行的查询。

  • escape($str)

参数:

  1. - **$str** (_mixed_) -- The value to escape, or an array of multiple ones返回:

The escaped value(s)返回类型:mixed

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

  • escapestr($str[, $like = FALSE_])

参数:

  1. - **$str** (_mixed_) -- A string value or array of multiple ones
  2. - **$like** (_bool_) -- Whether or not the string will be used in a LIKE condition返回:

The escaped string(s)返回类型:mixed

转义字符串。

警告

返回的字符串没有用引号引起来。

  • escapelike_str($str_)

参数:

  1. - **$str** (_mixed_) -- A string value or array of multiple ones返回:

The escaped string(s)返回类型:mixed

转义 LIKE 字符串。

和 escapestr() 方法类似,但同时也对 LIKE 语句中的 % 和 通配符进行转义。

重要

The escapelike_str() method uses '!' (exclamation mark)to escape special characters for _LIKE conditions. Because thismethod escapes partial strings that you would wrap in quotesyourself, it cannot automatically add the ESCAPE'!'condition for you, and so you'll have to manually do that.

  • primary($table)

参数:

  1. - **$table** (_string_) -- Table name返回:

The primary key name, FALSE if none返回类型:string

获取一个表的主键。

注解

如果数据库不支持主键检测,将假设第一列就是主键。

  • countall([$table = ''_])

参数:

  1. - **$table** (_string_) -- Table name返回:

Row count for the specified table返回类型:int

返回表中的总记录数。

  • listtables([$constrainby_prefix = FALSE])

参数:

  1. - **$constrain_by_prefix** (_bool_) -- TRUE to match table names by the configured dbprefix返回:

Array of table names or FALSE on failure返回类型:array

返回当前数据库的所有表。

  • tableexists($tablename)

参数:

  1. - **$table_name** (_string_) -- The table name返回:

TRUE if that table exists, FALSE if not返回类型:bool

判断某个数据库表是否存在。

  • listfields($table_)

参数:

  1. - **$table** (_string_) -- The table name返回:

Array of field names or FALSE on failure返回类型:array

返回某个表的所有字段名。

  • fieldexists($fieldname, $table_name)

参数:

  1. - **$table_name** (_string_) -- The table name
  2. - **$field_name** (_string_) -- The field name返回:

TRUE if that field exists in that table, FALSE if not返回类型:bool

判断某个字段是否存在。

  • fielddata($table_)

参数:

  1. - **$table** (_string_) -- The table name返回:

Array of field data items or FALSE on failure返回类型:array

获取某个表的所有字段信息。

  • escapeidentifiers($item_)

参数:

  1. - **$item** (_mixed_) -- The item or array of items to escape返回:

The input item(s), escaped返回类型:mixed

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

  • insertstring($table, $data_)

参数:

  1. - **$table** (_string_) -- The target table
  2. - **$data** (_array_) -- An associative array of key/value pairs返回:

The SQL INSERT statement, as a string返回类型:string

生成 INSERT 语句。

  • updatestring($table, $data, $where_)

参数:

  1. - **$table** (_string_) -- The target table
  2. - **$data** (_array_) -- An associative array of key/value pairs
  3. - **$where** (_mixed_) -- The WHERE statement conditions返回:

The SQL UPDATE statement, as a string返回类型:string

生成 UPDATE 语句。

  • callfunction($function_)

参数:

  1. - **$function** (_string_) -- Function name返回:

The function result返回类型:string

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

  • cacheset_path([$path = ''_])

参数:

  1. - **$path** (_string_) -- Path to the cache directory返回类型:

void

设置缓存路径。

  • cache_on()

返回:TRUE if caching is on, FALSE if not返回类型:bool

启用数据库结果缓存。

  • cache_off()

返回:TRUE if caching is on, FALSE if not返回类型:bool

禁用数据库结果缓存。

  • cachedelete([$segmentone = ''[, $segment_two = '']])

参数:

  1. - **$segment_one** (_string_) -- First URI segment
  2. - **$segment_two** (_string_) -- Second URI segment返回:

TRUE on success, FALSE on failure返回类型:bool

删除特定 URI 的缓存文件。

  • cache_delete_all()

返回:TRUE on success, FALSE on failure返回类型:bool

删除所有缓存文件。

  • close()

返回类型:void

关闭数据库的连接。

  • displayerror([$error = ''[, $swap = ''[, $native = FALSE_]]])

参数:

  1. - **$error** (_string_) -- The error message
  2. - **$swap** (_string_) -- Any "swap" values
  3. - **$native** (_bool_) -- Whether to localize the message返回类型:

void返回:Displays the DB error screensends the application/views/errors/error_db.php template

显示一个错误信息,并终止脚本执行。

错误信息是使用 application/views/errors/error_db.php 文件中的模板来显示。

  • protectidentifiers($item[, $prefixsingle = FALSE[, $protect_identifiers = NULL[, $field_exists = TRUE]]])

参数:

  1. - **$item** (_string_) -- The item to work with
  2. - **$prefix_single** (_bool_) -- Whether to apply the dbprefix even if the input item is a single identifier
  3. - **$protect_identifiers** (_bool_) -- Whether to quote identifiers
  4. - **$field_exists** (_bool_) -- Whether the supplied item contains a field name or not返回:

The modified item返回类型:string

根据配置的 dbprefix 参数,给列名或表名(可能是表别名)添加一个前缀。

为了处理包含路径的列名,必须要考虑一些逻辑。

例如下面的查询:

  1. SELECT * FROM hostname.database.table.column AS c FROM hostname.database.table

或者下面这个查询,使用了表别名:

  1. SELECT m.member_id, m.member_name FROM members AS m

由于列名可以包含四段(主机、数据库名、表名、字段名)或者有一个表别名的前缀,我们需要做点工作来判断这一点,才能将 dbprefix 插入到正确的位置。

该方法在查询构造器类中被广泛使用。