📄 database.php
字号:
<?php/*** @version $Id: database.php 11137 2008-10-15 19:47:01Z kdevine $* @package Joomla.Framework* @subpackage Database* @copyright Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.* @license GNU/GPL, see LICENSE.php* Joomla! is free software. This version may have been modified pursuant* to the GNU General Public License, and as distributed it includes or* is derivative of works licensed under the GNU General Public License or* other free or open source software licenses.* See COPYRIGHT.php for copyright notices and details.*/// Check to ensure this file is within the rest of the frameworkdefined('JPATH_BASE') or die();/** * Database connector class * * @abstract * @package Joomla.Framework * @subpackage Database * @since 1.0 */class JDatabase extends JObject{ /** * The database driver name * * @var string */ var $name = ''; /** * The query sql string * * @var string **/ var $_sql = ''; /** * The database error number * * @var int **/ var $_errorNum = 0; /** * The database error message * * @var string */ var $_errorMsg = ''; /** * The prefix used on all database tables * * @var string */ var $_table_prefix = ''; /** * The connector resource * * @var resource */ var $_resource = ''; /** * The last query cursor * * @var resource */ var $_cursor = null; /** * Debug option * * @var boolean */ var $_debug = 0; /** * The limit for the query * * @var int */ var $_limit = 0; /** * The for offset for the limit * * @var int */ var $_offset = 0; /** * The number of queries performed by the object instance * * @var int */ var $_ticker = 0; /** * A log of queries * * @var array */ var $_log = null; /** * The null/zero date string * * @var string */ var $_nullDate = null; /** * Quote for named objects * * @var string */ var $_nameQuote = null; /** * UTF-8 support * * @var boolean * @since 1.5 */ var $_utf = 0; /** * The fields that are to be quote * * @var array * @since 1.5 */ var $_quoted = null; /** * Legacy compatibility * * @var bool * @since 1.5 */ var $_hasQuoted = null; /** * Database object constructor * * @access public * @param array List of options used to configure the connection * @since 1.5 */ function __construct( $options ) { $prefix = array_key_exists('prefix', $options) ? $options['prefix'] : 'jos_'; // Determine utf-8 support $this->_utf = $this->hasUTF(); //Set charactersets (needed for MySQL 4.1.2+) if ($this->_utf){ $this->setUTF(); } $this->_table_prefix = $prefix; $this->_ticker = 0; $this->_errorNum = 0; $this->_log = array(); $this->_quoted = array(); $this->_hasQuoted = false; // Register faked "destructor" in PHP4 to close all connections we might have made if (version_compare(PHP_VERSION, '5') == -1) { register_shutdown_function(array(&$this, '__destruct')); } } /** * Returns a reference to the global Database object, only creating it * if it doesn't already exist. * * The 'driver' entry in the parameters array specifies the database driver * to be used (defaults to 'mysql' if omitted). All other parameters are * database driver dependent. * * @param array Parameters to be passed to the database driver * @return JDatabase A database object * @since 1.5 */ function &getInstance( $options = array() ) { static $instances; if (!isset( $instances )) { $instances = array(); } $signature = serialize( $options ); if (empty($instances[$signature])) { $driver = array_key_exists('driver', $options) ? $options['driver'] : 'mysql'; $select = array_key_exists('select', $options) ? $options['select'] : true; $database = array_key_exists('database', $options) ? $options['database'] : null; $driver = preg_replace('/[^A-Z0-9_\.-]/i', '', $driver); $path = dirname(__FILE__).DS.'database'.DS.$driver.'.php'; if (file_exists($path)) { require_once($path); } else { JError::setErrorHandling(E_ERROR, 'die'); //force error type to die $error = JError::raiseError( 500, JTEXT::_('Unable to load Database Driver:') .$driver); return $error; } $adapter = 'JDatabase'.$driver; $instance = new $adapter($options); if ( $error = $instance->getErrorMsg() ) { JError::setErrorHandling(E_ERROR, 'ignore'); //force error type to die $error = JError::raiseError( 500, JTEXT::_('Unable to connect to the database:') .$error); return $error; } $instances[$signature] = & $instance; } return $instances[$signature]; } /** * Database object destructor * * @abstract * @access private * @return boolean * @since 1.5 */ function __destruct() { return true; } /** * Get the database connectors * * @access public * @return array An array of available session handlers */ function getConnectors() { jimport('joomla.filesystem.folder'); $handlers = JFolder::files(dirname(__FILE__).DS.'database', '.php$'); $names = array(); foreach($handlers as $handler) { $name = substr($handler, 0, strrpos($handler, '.')); $class = 'JDatabase'.ucfirst($name); if(!class_exists($class)) { require_once(dirname(__FILE__).DS.'database'.DS.$name.'.php'); } if(call_user_func_array( array( trim($class), 'test' ), null)) { $names[] = $name; } } return $names; } /** * Test to see if the MySQLi connector is available * * @static * @access public * @return boolean True on success, false otherwise. */ function test() { return false; } /** * Determines if the connection to the server is active. * * @access public * @return boolean * @since 1.5 */ function connected() { return false; } /** * Determines UTF support * * @abstract * @access public * @return boolean * @since 1.5 */ function hasUTF() { return false; } /** * Custom settings for UTF support * * @abstract * @access public * @since 1.5 */ function setUTF() { } /** * Adds a field or array of field names to the list that are to be quoted * * @access public * @param mixed Field name or array of names * @since 1.5 */ function addQuoted( $quoted ) { if (is_string( $quoted )) { $this->_quoted[] = $quoted; } else { $this->_quoted = array_merge( $this->_quoted, (array)$quoted ); } $this->_hasQuoted = true; } /** * Splits a string of queries into an array of individual queries * * @access public * @param string The queries to split * @return array queries */ function splitSql( $queries ) { $start = 0; $open = false; $open_char = ''; $end = strlen($queries); $query_split = array(); for($i=0;$i<$end;$i++) { $current = substr($queries,$i,1); if(($current == '"' || $current == '\'')) { $n = 2; while(substr($queries,$i - $n + 1, 1) == '\\' && $n < $i) { $n ++; } if($n%2==0) { if ($open) { if($current == $open_char) { $open = false; $open_char = ''; } } else { $open = true; $open_char = $current; } } } if(($current == ';' && !$open)|| $i == $end - 1) { $query_split[] = substr($queries, $start, ($i - $start + 1)); $start = $i + 1; } } return $query_split; } /** * Checks if field name needs to be quoted * * @access public * @param string The field name * @return bool */ function isQuoted( $fieldName ) { if ($this->_hasQuoted) { return in_array( $fieldName, $this->_quoted ); } else { return true; } } /** * Sets the debug level on or off * * @access public * @param int 0 = off, 1 = on */ function debug( $level ) { $this->_debug = intval( $level ); } /** * Get the database UTF-8 support * * @access public * @return boolean * @since 1.5 */ function getUTFSupport() { return $this->_utf; } /** * Get the error number * * @access public * @return int The error number for the most recent query */ function getErrorNum() { return $this->_errorNum; } /** * Get the error message * * @access public * @return string The error message for the most recent query */ function getErrorMsg($escaped = false) { if($escaped) { return addslashes($this->_errorMsg); } else { return $this->_errorMsg; } } /** * Get a database escaped string * * @param string The string to be escaped * @param boolean Optional parameter to provide extra escaping * @return string * @access public * @abstract */ function getEscaped( $text, $extra = false ) { return; } /** * Get a database error log * * @access public * @return array */ function getLog( ) { return $this->_log; } /** * Get the total number of queries made * * @access public * @return array */ function getTicker( ) { return $this->_ticker; } /** * Quote an identifier name (field, table, etc) * * @access public * @param string The name * @return string The quoted name */ function nameQuote( $s ) { // Only quote if the name is not using dot-notation if (strpos( $s, '.' ) === false) { $q = $this->_nameQuote; if (strlen( $q ) == 1) { return $q . $s . $q; } else { return $q{0} . $s . $q{1}; } } else { return $s; } } /** * Get the database table prefix * * @access public * @return string The database prefix */ function getPrefix() { return $this->_table_prefix; } /** * Get the database null date * * @access public * @return string Quoted null/zero date string */ function getNullDate() { return $this->_nullDate; } /** * Sets the SQL query string for later execution. * * This function replaces a string identifier <var>$prefix</var> with the * string held is the <var>_table_prefix</var> class variable. * * @access public * @param string The SQL query * @param string The offset to start selection * @param string The number of results to return * @param string The common table prefix */ function setQuery( $sql, $offset = 0, $limit = 0, $prefix='#__' ) { $this->_sql = $this->replacePrefix( $sql, $prefix ); $this->_limit = (int) $limit;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -