模块

abstract Database

Database connection wrapper/helper.

You may get a database instance using `Database::instance('name')` where name is the config group.

This class provides connection instance management via Database Drivers, as well as quoting, escaping and other related functions. Querys are done using Database_Query and Database_Query_Builder objects, which can be easily created using the DB helper class.

package
BootPHP/数据库
author
Tinsh
copyright
(c) 2008-2010 BootPHP Team

该类在 MODPATH/database/classes/database.php 第 20 行声明。

属性

public static string $default

default instance name

string(7) "default"

public static array $instances

Database instances

array(0) 

public string $last_query

the last query executed

public $tablePrefix

protected $_config

protected $_connection

protected $_identifier

protected $_instance

方法

final public __destruct( ) (在 Database 中定义)

Disconnect from the database when the object is destroyed. // Destroy the database instance unset(Database::instances[(string)$db], $db); [!!] Calling `unset($db)` is not enough to destroy the database, as it will still be stored in `Database::$instances`.

返回值

  • void

源代码

final public function __destruct()
{
	$this->disconnect();
}

final public __toString( ) (在 Database 中定义)

Returns the database instance name. echo (string)$db;

返回值

  • string

源代码

final public function __toString()
{
	return $this->_instance;
}

abstract public begin( [ string $mode = NULL ] ) (在 Database 中定义)

Start a SQL transaction // Start the transactions $db->begin(); try { DB::insert('users')->values($user1)... DB::insert('users')->values($user2)... // Insert successful commit the changes $db->commit(); } catch(Database_Exception $e) { // Insert failed. Rolling back changes... $db->rollback(); }

参数

  • string $mode = NULL - Transaction mode

返回值

  • boolean

源代码

abstract public function begin($mode = NULL);

abstract public commit( ) (在 Database 中定义)

提交当前事务 // Commit the database changes $db->commit();

返回值

  • boolean

源代码

abstract public function commit();

abstract public connect( ) (在 Database 中定义)

Connect to the database. This is called automatically when the first query is executed. $db->connect();

Tags

返回值

  • void

源代码

abstract public function connect();

public count_records( mixed $table ) (在 Database 中定义)

Count the number of records in a table. // Get the total number of records in the "users" table $count = $db->count_records('users');

参数

  • mixed $table required - Table name string or array(query, alias)

返回值

  • integer

源代码

public function count_records($table)
{
	// Quote the table name
	$table = $this->quote_table($table);
	return $this->query('select', 'SELECT COUNT(*) AS total_row_count FROM ' . $table, false)
			->get('total_row_count');
}

public datatype( string $type ) (在 Database 中定义)

Returns a normalized array describing the SQL data type $db->datatype('char');

参数

  • string $type required - SQL data type

返回值

  • array

源代码

public function datatype($type)
{
	static $types = array
		(
		// SQL-92
		'bit' => array('type' => 'string', 'exact' => true),
		'bit varying' => array('type' => 'string'),
		'char' => array('type' => 'string', 'exact' => true),
		'char varying' => array('type' => 'string'),
		'character' => array('type' => 'string', 'exact' => true),
		'character varying' => array('type' => 'string'),
		'date' => array('type' => 'string'),
		'dec' => array('type' => 'float', 'exact' => true),
		'decimal' => array('type' => 'float', 'exact' => true),
		'double precision' => array('type' => 'float'),
		'float' => array('type' => 'float'),
		'int' => array('type' => 'int', 'min' => '-2147483648', 'max' => '2147483647'),
		'integer' => array('type' => 'int', 'min' => '-2147483648', 'max' => '2147483647'),
		'interval' => array('type' => 'string'),
		'national char' => array('type' => 'string', 'exact' => true),
		'national char varying' => array('type' => 'string'),
		'national character' => array('type' => 'string', 'exact' => true),
		'national character varying' => array('type' => 'string'),
		'nchar' => array('type' => 'string', 'exact' => true),
		'nchar varying' => array('type' => 'string'),
		'numeric' => array('type' => 'float', 'exact' => true),
		'real' => array('type' => 'float'),
		'smallint' => array('type' => 'int', 'min' => '-32768', 'max' => '32767'),
		'time' => array('type' => 'string'),
		'time with time zone' => array('type' => 'string'),
		'timestamp' => array('type' => 'string'),
		'timestamp with time zone' => array('type' => 'string'),
		'varchar' => array('type' => 'string'),
		// SQL:1999
		'binary large object' => array('type' => 'string', 'binary' => true),
		'blob' => array('type' => 'string', 'binary' => true),
		'boolean' => array('type' => 'bool'),
		'char large object' => array('type' => 'string'),
		'character large object' => array('type' => 'string'),
		'clob' => array('type' => 'string'),
		'national character large object' => array('type' => 'string'),
		'nchar large object' => array('type' => 'string'),
		'nclob' => array('type' => 'string'),
		'time without time zone' => array('type' => 'string'),
		'timestamp without time zone' => array('type' => 'string'),
		// SQL:2003
		'bigint' => array('type' => 'int', 'min' => '-9223372036854775808', 'max' => '9223372036854775807'),
		// SQL:2008
		'binary' => array('type' => 'string', 'binary' => true, 'exact' => true),
		'binary varying' => array('type' => 'string', 'binary' => true),
		'varbinary' => array('type' => 'string', 'binary' => true),
	);
	if (isset($types[$type]))
		return $types[$type];
	return array();
}

abstract public delete( string $table , string $where ) (在 Database 中定义)

执行 SQL 查询,用于删除一条记录

参数

  • string $table required - 表名
  • string $where required - 查询条件

返回值

  • integer - 前一次 SQL 操作所影响的记录行数

源代码

abstract public function delete($table, $where);

public disconnect( ) (在 Database 中定义)

Disconnect from the database. This is called automatically by Database::__destruct. Clears the database instance from Database::$instances. $db->disconnect();

返回值

  • boolean

源代码

public function disconnect()
{
	unset(Database::$instances[$this->_instance]);
	return true;
}

abstract public escape( string $value ) (在 Database 中定义)

Sanitize a string by escaping characters that could cause an SQL injection attack. $value = $db->escape('any string');

参数

  • string $value required - Value to quote

返回值

  • string

源代码

abstract public function escape($value);

abstract public insert( string $table , array $data ) (在 Database 中定义)

执行 SQL 查询,用于插入一条记录

参数

  • string $table required - 表名
  • array $data required - 要插入的数据

返回值

  • integer - INSERT 查询产生的 ID 号

源代码

abstract public function insert($table, $data);

public static instance( [ string $name = NULL , array $config = NULL ] ) (在 Database 中定义)

Get a singleton Database instance. If configuration is not specified, it will be loaded from the database configuration file using the same group as the name. // Load the default database $db = Database::instance(); // Create a custom configured instance $db = Database::instance('custom', $config);

参数

  • string $name = NULL - Instance name
  • array $config = NULL - Configuration parameters

返回值

  • Database

源代码

public static function instance($name = NULL, array $config = NULL)
{
	if ($name === NULL)
	{
		// Use the default instance name
		$name = Database::$default;
	}
	if (!isset(Database::$instances[$name]))
	{
		if ($config === NULL)
		{
			// Load the configuration for this database
			$config = BootPHP::$config->load('database')->$name;
		}
		if (!isset($config['type']))
		{
			throw new BootPHP_Exception('Database type not defined in :name configuration', array(':name' => $name));
		}
		// Set the driver class name
		$driver = 'Database_' . ucfirst($config['type']);
		// Create the database connection instance
		new $driver($name, $config);
	}
	return Database::$instances[$name];
}

abstract public list_columns( string $table [, string $like = NULL , boolean $add_prefix = bool true ] ) (在 Database 中定义)

Lists all of the columns in a table. Optionally, a LIKE string can be used to search for specific fields. // Get all columns from the "users" table $columns = $db->list_columns('users'); // Get all name-related columns $columns = $db->list_columns('users', '%name%'); // Get the columns from a table that doesn't use the table prefix $columns = $db->list_columns('users', NULL, false);

参数

  • string $table required - Table to get columns from
  • string $like = NULL - Column to search for
  • boolean $add_prefix = bool true - Whether to add the table prefix automatically or not

返回值

  • array

源代码

abstract public function list_columns($table, $like = NULL, $add_prefix = true);

abstract public list_tables( [ string $like = NULL ] ) (在 Database 中定义)

List all of the tables in the database. Optionally, a LIKE string can be used to search for specific tables. // Get all tables in the current database $tables = $db->list_tables(); // Get all user-related tables $tables = $db->list_tables('user%');

参数

  • string $like = NULL - Table to search for

返回值

  • array

源代码

abstract public function list_tables($like = NULL);

abstract public query( string $type , string $sql ) (在 Database 中定义)

执行给定的类型的 SQL 查询。

// Make a SELECT query and use objects for results
$db->query('select', 'SELECT * FROM groups', true);
// Make a SELECT query and use "Model_User" for the results
$db->query('select', 'SELECT * FROM users LIMIT 1', 'Model_User');

参数

  • string $type required - 'select'、'insert' 等等
  • string $sql required - SQL 查询

返回值

  • object - SELECT 查询:结果
  • array - INSERT 查询:list(插入的 id, 行数)
  • integer - 其它查询:影响的行数

源代码

abstract public function query($type, $sql);

public quote( mixed $value ) (在 Database 中定义)

Quote a value for an SQL query.

$db->quote(NULL);   // 'NULL'
$db->quote(10);     // 10
$db->quote('fred'); // 'fred'

Objects passed to this function will be converted to strings. Database_Expression objects will be compiled. Database_Query objects will be compiled and converted to a sub-query. All other objects will be converted using the `__toString` method.

参数

  • mixed $value required - Any value to quote

Tags

返回值

  • string

源代码

public function quote($value)
{
	if ($value === NULL)
	{
		return 'NULL';
	}
	elseif ($value === true)
	{
		return "'1'";
	}
	elseif ($value === false)
	{
		return "'0'";
	}
	elseif (is_object($value))
	{
		if ($value instanceof Database_Query)
		{
			// Create a sub-query
			return '(' . $value->compile($this) . ')';
		}
		elseif ($value instanceof Database_Expression)
		{
			// Compile the expression
			return $value->compile($this);
		}
		else
		{
			// Convert the object to a string
			return $this->quote((string) $value);
		}
	}
	elseif (is_array($value))
	{
		return '(' . implode(', ', array_map(array($this, __FUNCTION__), $value)) . ')';
	}
	elseif (is_int($value))
	{
		return (int) $value;
	}
	elseif (is_float($value))
	{
		// Convert to non-locale aware float to prevent possible commas
		return sprintf('%F', $value);
	}
	return $this->escape($value);
}

public quote_column( mixed $column ) (在 Database 中定义)

Quote a database column name and add the table prefix if needed. $column = $db->quote_column($column); You can also use SQL methods within identifiers. // The value of "column" will be quoted $column = $db->quote_column('COUNT("column")'); Objects passed to this function will be converted to strings. Database_Expression objects will be compiled. Database_Query objects will be compiled and converted to a sub-query. All other objects will be converted using the `__toString` method.

参数

  • mixed $column required - Column name or array(column, alias)

Tags

返回值

  • string

源代码

public function quote_column($column)
{
	if (is_array($column))
	{
		list($column, $alias) = $column;
	}
	if ($column instanceof Database_Query)
	{
		// Create a sub-query
		$column = '(' . $column->compile($this) . ')';
	}
	elseif ($column instanceof Database_Expression)
	{
		// Compile the expression
		$column = $column->compile($this);
	}
	else
	{
		// Convert to a string
		$column = (string) $column;
		if ($column === '*')
		{
			return $column;
		}
		elseif (strpos($column, '"') !== false)
		{
			// Quote the column in FUNC("column") identifiers
			$column = preg_replace('/"(.+?)"/e', '$this->quote_column("$1")', $column);
		}
		elseif (strpos($column, '.') !== false)
		{
			$parts = explode('.', $column);
			if ($prefix = $this->table_prefix())
			{
				// Get the offset of the table name, 2nd-to-last part
				$offset = count($parts) - 2;
				// Add the table prefix to the table name
				$parts[$offset] = $prefix . $parts[$offset];
			}
			foreach ($parts as & $part)
			{
				if ($part !== '*')
				{
					// Quote each of the parts
					$part = $this->_identifier . $part . $this->_identifier;
				}
			}
			$column = implode('.', $parts);
		}
		else
		{
			$column = $this->_identifier . $column . $this->_identifier;
		}
	}
	if (isset($alias))
	{
		$column .= ' AS ' . $this->_identifier . $alias . $this->_identifier;
	}
	return $column;
}

public quote_identifier( mixed $value ) (在 Database 中定义)

Quote a database identifier Objects passed to this function will be converted to strings. Database_Expression objects will be compiled. Database_Query objects will be compiled and converted to a sub-query. All other objects will be converted using the `__toString` method.

参数

  • mixed $value required - Any identifier

返回值

  • string

源代码

public function quote_identifier($value)
{
	if (is_array($value))
	{
		list($value, $alias) = $value;
	}
	if ($value instanceof Database_Query)
	{
		// Create a sub-query
		$value = '(' . $value->compile($this) . ')';
	}
	elseif ($value instanceof Database_Expression)
	{
		// Compile the expression
		$value = $value->compile($this);
	}
	else
	{
		// Convert to a string
		$value = (string) $value;
		if (strpos($value, '.') !== false)
		{
			$parts = explode('.', $value);
			foreach ($parts as & $part)
			{
				// Quote each of the parts
				$part = $this->_identifier . $part . $this->_identifier;
			}
			$value = implode('.', $parts);
		}
		else
		{
			$value = $this->_identifier . $value . $this->_identifier;
		}
	}
	if (isset($alias))
	{
		$value .= ' AS ' . $this->_identifier . $alias . $this->_identifier;
	}
	return $value;
}

public quote_table( mixed $table ) (在 Database 中定义)

Quote a database table name and adds the table prefix if needed. $table = $db->quote_table($table); Objects passed to this function will be converted to strings. Database_Expression objects will be compiled. Database_Query objects will be compiled and converted to a sub-query. All other objects will be converted using the `__toString` method.

参数

  • mixed $table required - Table name or array(table, alias)

Tags

返回值

  • string

源代码

public function quote_table($table)
{
	if (is_array($table))
	{
		list($table, $alias) = $table;
	}
	if ($table instanceof Database_Query)
	{
		// Create a sub-query
		$table = '(' . $table->compile($this) . ')';
	}
	elseif ($table instanceof Database_Expression)
	{
		// Compile the expression
		$table = $table->compile($this);
	}
	else
	{
		// Convert to a string
		$table = (string) $table;
		if (strpos($table, '.') !== false)
		{
			$parts = explode('.', $table);
			if ($prefix = $this->table_prefix())
			{
				// Get the offset of the table name, last part
				$offset = count($parts) - 1;
				// Add the table prefix to the table name
				$parts[$offset] = $prefix . $parts[$offset];
			}
			foreach ($parts as & $part)
			{
				// Quote each of the parts
				$part = $this->_identifier . $part . $this->_identifier;
			}
			$table = implode('.', $parts);
		}
		else
		{
			// Add the table prefix
			$table = $this->_identifier . $this->table_prefix() . $table . $this->_identifier;
		}
	}
	if (isset($alias))
	{
		// Attach table prefix to alias
		$table .= ' AS ' . $this->_identifier . $this->table_prefix() . $alias . $this->_identifier;
	}
	return $table;
}

abstract public rollback( ) (在 Database 中定义)

Abort the current transaction // Undo the changes $db->rollback();

返回值

  • boolean

源代码

abstract public function rollback();

abstract public select( string $sql ) (在 Database 中定义)

执行 SQL 查询,并返回一个对象类型的记录

参数

  • string $sql required - SQL 查询

返回值

  • object - 对象类型的记录

源代码

abstract public function select($sql);

abstract public selectArray( string $sql ) (在 Database 中定义)

执行 SQL 查询,并返回一个由对象类型的记录构成的数组

参数

  • string $sql required - SQL 查询

返回值

  • array - 对象类型的记录构成的数组

源代码

abstract public function selectArray($sql);

abstract public setCharset( string $charset ) (在 Database 中定义)

Set the connection character set. This is called automatically by Database::connect. $db->set_charset('utf8');

参数

  • string $charset required - Character set name

Tags

返回值

  • void

源代码

abstract public function setCharset($charset);

public table_prefix( ) (在 Database 中定义)

Return the table prefix defined in the current configuration. $prefix = $db->table_prefix();

返回值

  • string

源代码

public function table_prefix()
{
	return $this->_config['table_prefix'];
}

abstract public update( string $table , array $data , string $where ) (在 Database 中定义)

执行 SQL 查询,用于更新一条记录

参数

  • string $table required - 表名
  • array $data required - 要更新的数据
  • string $where required - 查询条件

返回值

  • integer - 前一次 SQL 操作所影响的记录行数

源代码

abstract public function update($table, $data, $where);

protected __construct( ) (在 Database 中定义)

Stores the database configuration locally and name the instance. [!!] This method cannot be accessed directly, you must use Database::instance.

返回值

  • void

源代码

protected function __construct($name, array $config)
{
	// Set the instance name
	$this->_instance = $name;
	// Store the config locally
	$this->_config = $config;
	// 设置表前缀
	$this->tablePrefix = $config['table_prefix'];
	// Store the database instance
	Database::$instances[$name] = $this;
}

protected _parse_type( string $type ) (在 Database 中定义)

Extracts the text between parentheses, if any. // Returns: array('CHAR', '6') list($type, $length) = $db->_parse_type('CHAR(6)');

参数

  • string $type required

返回值

  • array - List containing the type and length, if any

源代码

protected function _parse_type($type)
{
	if (($open = strpos($type, '(')) === false)
	{
		// No length specified
		return array($type, NULL);
	}
	// Closing parenthesis
	$close = strpos($type, ')', $open);
	// Length without parentheses
	$length = substr($type, $open + 1, $close - 1 - $open);
	// Type without the length
	$type = substr($type, 0, $open) . substr($type, $close + 1);
	return array($type, $length);
}