_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. * * @param string Database driver * @param string Database host * @param string Database user name * @param string Database user password * @param string Database name * @param string Common prefix for all tables * @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 = JPATH_LIBRARIES.DS.'joomla'.DS.'database'.DS.'database'.DS.$driver.'.php'; if (file_exists($path)) { $path = "joomla.database.database.$driver"; jimport( $path ); } else { $error = new JException( E_ERROR, 500, 'Unable to load Database Driver: '.$driver); return $error; //die('Unable to load Database Driver: '.$driver); } $adapter = 'JDatabase'.$driver; $instance = new $adapter($options); if ( $error = $instance->getErrorMsg() ) { $error = new JException( E_ERROR, 500, 'Unable to connect to the database: '.$error); return $error; //die('Unable to connect to the database: '.$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, '.')); jimport('joomla.database.database.'.$name); $class = 'JDatabase'.ucfirst($name); 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; } /** * 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 * * @abstract * @access public * @return string */ function getEscaped( $text ) { return; } /** * Quote an identifier name (field, table, etc) * * @access public * @param string The name * @return string The quoted name */ function nameQuote( $s ) { $q = $this->_nameQuote; if (strlen( $q ) == 1) { return $q . $s . $q; } else { return $q{0} . $s . $q{1}; } } /** * 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 $prefix with the * string held is the _table_prefix 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; $this->_offset = (int) $offset; } /** * This function replaces a string identifier $prefix with the * string held is the _table_prefix class variable. * * @access public * @param string The SQL query * @param string The common table prefix */ function replacePrefix( $sql, $prefix='#__' ) { $sql = trim( $sql ); $escaped = false; $quoteChar = ''; $n = strlen( $sql ); $startPos = 0; $literal = ''; while ($startPos < $n) { $ip = strpos($sql, $prefix, $startPos); if ($ip === false) { break; } $j = strpos( $sql, "'", $startPos ); $k = strpos( $sql, '"', $startPos ); if (($k !== FALSE) && (($k < $j) || ($j === FALSE))) { $quoteChar = '"'; $j = $k; } else { $quoteChar = "'"; } if ($j === false) { $j = $n; } $literal .= str_replace(