⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 database.php

📁 Joomla!是一套获得过多个奖项的内容管理系统(Content Management System, CMS)。Joomla!采用PHP+MySQL数据库开发
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?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 + -