346 Zeilen
		
	
	
	
		
			8,4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			346 Zeilen
		
	
	
	
		
			8,4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * This file is part of MySQLDumper released under the GNU/GPL 2 license
 | 
						|
 * http://www.mysqldumper.net
 | 
						|
 *
 | 
						|
 * @package         MySQLDumper
 | 
						|
 * @subpackage      Db
 | 
						|
 * @version         SVN: $rev: 1212 $
 | 
						|
 * @author          $Author$
 | 
						|
 */
 | 
						|
/**
 | 
						|
 * DB-Factory
 | 
						|
 *
 | 
						|
 * @abstract
 | 
						|
 * @package         MySQLDumper
 | 
						|
 * @subpackage      Db
 | 
						|
 */
 | 
						|
abstract class Msd_Db
 | 
						|
{
 | 
						|
    // define result set types
 | 
						|
    const ARRAY_NUMERIC = 0; // return resultset as numeric array
 | 
						|
    const ARRAY_ASSOC = 1; // return resultset as associative array
 | 
						|
    const ARRAY_OBJECT = 2; // return resultset as array of object
 | 
						|
    const SIMPLE = 3; // return result as boolean
 | 
						|
    /**
 | 
						|
     * SQL-Server
 | 
						|
     *
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $_server;
 | 
						|
 | 
						|
    /**
 | 
						|
     * SQL user used to authenticate at server
 | 
						|
     *
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $_user;
 | 
						|
 | 
						|
    /**
 | 
						|
     * SQL user password used to authenticate
 | 
						|
     *
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $_password;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Port used for connection to server
 | 
						|
     *
 | 
						|
     * @var int
 | 
						|
     */
 | 
						|
    protected $_port;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Socket used for connection
 | 
						|
     *
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $_socket;
 | 
						|
 | 
						|
    /**
 | 
						|
     * List of databases adn default settings
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    protected $_databases = null;
 | 
						|
 | 
						|
    /**
 | 
						|
     * charset to use (default utf8)
 | 
						|
     *
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $_connectionCharset = 'utf8';
 | 
						|
 | 
						|
    /**
 | 
						|
     * the selected db
 | 
						|
     *
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $_dbSelected = '';
 | 
						|
 | 
						|
    /**
 | 
						|
     * List of cached tables
 | 
						|
     *
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    protected $_tables = array();
 | 
						|
 | 
						|
    /**
 | 
						|
     * Meta informations about tables
 | 
						|
     *
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    protected $_metaTables = array();
 | 
						|
 | 
						|
    /**
 | 
						|
     * Charsets the server supports (cached)
 | 
						|
     *
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    protected $_charsets = array();
 | 
						|
 | 
						|
    /**
 | 
						|
     * Init database object
 | 
						|
     *
 | 
						|
     * @param array $options Array containing connection options
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    protected function __construct ($options)
 | 
						|
    {
 | 
						|
        $this->_server = $options['host'];
 | 
						|
        $this->_user = $options['user'];
 | 
						|
        $this->_password = $options['pass'];
 | 
						|
        $this->_port = (int) $options['port'];
 | 
						|
        $this->_socket = $options['socket'];
 | 
						|
    }
 | 
						|
    /**
 | 
						|
     * Create database adapter
 | 
						|
     *
 | 
						|
     * @param array   $options    Connection options
 | 
						|
     * @param boolean $forceMysql Whether to force the use of MySQL
 | 
						|
     *
 | 
						|
     * @return MsdDbFactory
 | 
						|
     */
 | 
						|
    public static function getAdapter($options = null, $forceMysql = false)
 | 
						|
    {
 | 
						|
        if ($options === null) {
 | 
						|
            $config = Msd_Configuration::getInstance();
 | 
						|
            $options = array(
 | 
						|
                'host' => $config->get('config.dbuser.host'),
 | 
						|
                'user' => $config->get('config.dbuser.user'),
 | 
						|
                'pass' => $config->get('config.dbuser.pass'),
 | 
						|
                'port' => (int) $config->get('config.dbuser.port'),
 | 
						|
                'socket' => $config->get('config.dbuser.socket'),
 | 
						|
            );
 | 
						|
        }
 | 
						|
        if (function_exists('mysqli_connect') && !$forceMysql) {
 | 
						|
            $dbObject = new Msd_Db_Mysqli($options);
 | 
						|
        } else {
 | 
						|
            $dbObject = new Msd_Db_Mysql($options);
 | 
						|
        }
 | 
						|
        return $dbObject;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Establish a connection to SQL-Server. The connection is stored and used
 | 
						|
     * for further DB requests.
 | 
						|
     *
 | 
						|
     * @return bool if connection is successfull
 | 
						|
     * */
 | 
						|
    abstract protected function _dbConnect ();
 | 
						|
    /**
 | 
						|
     * Get selected database
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    abstract public function getSelectedDb ();
 | 
						|
    /**
 | 
						|
     * Get version nr of sql server
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    abstract public function getServerInfo ();
 | 
						|
    /**
 | 
						|
     * Get version nr of sql client
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    abstract public function getClientInfo ();
 | 
						|
    /**
 | 
						|
     * Get all known character sets of this SQL-Server.
 | 
						|
     *
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    abstract public function getCharsets ();
 | 
						|
    /**
 | 
						|
     * Set character set of the MySQL-connection.
 | 
						|
     *
 | 
						|
     * Trys to set  the connection charset and returns it.
 | 
						|
     * Throw Exception on failure.
 | 
						|
     *
 | 
						|
     * @param string $charset
 | 
						|
     * @throws Exception
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    abstract public function setConnectionCharset (
 | 
						|
    $charset = 'utf8');
 | 
						|
    /**
 | 
						|
     * Get list of databases
 | 
						|
     *
 | 
						|
     * Gets list of all databases that the actual SQL-Server-User has access to
 | 
						|
     * and saves it in $this->databases.
 | 
						|
     * Returns true on success or false on error.
 | 
						|
     *
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    abstract public function getDatabases ();
 | 
						|
    /**
 | 
						|
     * Select the given database to use it as the target for following queries.
 | 
						|
     *
 | 
						|
     * Returns true if selection was succesfull otherwise false.
 | 
						|
     *
 | 
						|
     * @throws Exception
 | 
						|
     * @param string  $database
 | 
						|
     *
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    abstract public function selectDb ($database);
 | 
						|
    /**
 | 
						|
     * Execute a query and set _resultHandle
 | 
						|
     *
 | 
						|
     * If $getRows is true alls rows are fetched and returned
 | 
						|
     *
 | 
						|
     * @param string  $query   The query to execute
 | 
						|
     * @param const   $kind    Type of result set
 | 
						|
     * @param boolean $getRows Whether to fetch all rows and return them
 | 
						|
     *
 | 
						|
     * @return boolean|array
 | 
						|
     */
 | 
						|
    abstract public function query ($query,
 | 
						|
    $kind = self::ARRAY_OBJECT, $getRows = true);
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get next row from result set
 | 
						|
     *
 | 
						|
     * @param const $kind
 | 
						|
     *
 | 
						|
     * @return array|object
 | 
						|
     */
 | 
						|
    abstract public function getNextRow($kind);
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get the list of tables of given database
 | 
						|
     *
 | 
						|
     * @param string $dbName Name of database
 | 
						|
     *
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    abstract public function getTables ($dbName);
 | 
						|
    /**
 | 
						|
     * Gets extended table information for one or all tables
 | 
						|
     *
 | 
						|
     * @param string $table
 | 
						|
     *
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    abstract public function getTableStatus ($table = false);
 | 
						|
    /**
 | 
						|
     * Returns the CREATE Statement of a table.
 | 
						|
     *
 | 
						|
     * @throws Exception
 | 
						|
     * @param string $table    Get CREATE-Statement for this table
 | 
						|
     *
 | 
						|
     * @return string Create statement
 | 
						|
     */
 | 
						|
    abstract public function getTableCreate ($table);
 | 
						|
    /**
 | 
						|
     * Gets the full description of all columns of a table
 | 
						|
     *
 | 
						|
     * Saves list to $this->metaTables[$database][$table].
 | 
						|
     *
 | 
						|
     * @param string $table    Table to read meta info from
 | 
						|
     *
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    abstract public function getTableColumns ($table);
 | 
						|
    /**
 | 
						|
     * Gets the number of affected rows of the last query
 | 
						|
     *
 | 
						|
     * @return int
 | 
						|
     */
 | 
						|
    abstract public function getAffectedRows ();
 | 
						|
    /**
 | 
						|
     * Gets the servers variables
 | 
						|
     *
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    abstract public function getVariables ();
 | 
						|
    /**
 | 
						|
     * Escape a value for inserting it in query
 | 
						|
     *
 | 
						|
     * @param string $val
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    abstract public function escape ($val);
 | 
						|
    /**
 | 
						|
     * Optimize a table. Returns true on success or MySQL-Error.
 | 
						|
     *
 | 
						|
     * @param $table string Name of table
 | 
						|
     *
 | 
						|
     * @return string|bool Returned optimize message or false on error
 | 
						|
     */
 | 
						|
    abstract public function optimizeTable ($table);
 | 
						|
    /**
 | 
						|
     * Creates a new database with the given name, charackter set and collation.
 | 
						|
     *
 | 
						|
     * @abstract
 | 
						|
     *
 | 
						|
     * @param string $databaseName      Name of the new database
 | 
						|
     * @param string $databaseCharset   Charackter set of the new database
 | 
						|
     * @param string $databaseCollation Collation of the new database
 | 
						|
     *
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    abstract public function createDatabase(
 | 
						|
        $databaseName,
 | 
						|
        $databaseCharset = '',
 | 
						|
        $databaseCollation = ''
 | 
						|
    );
 | 
						|
    /**
 | 
						|
     * Retrieves the collations from information schema.
 | 
						|
     *
 | 
						|
     * @param string|null $charsetName Name of the charset
 | 
						|
     *
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    abstract public function getCollations($charsetName = null);
 | 
						|
    /**
 | 
						|
     * Retrieves the default collation for the charset or the given charset.
 | 
						|
     *
 | 
						|
     * @param string|null $charsetName Name of the charset
 | 
						|
     *
 | 
						|
     * @return array|string
 | 
						|
     */
 | 
						|
    abstract public function getDefaultCollations($charsetName = null);
 | 
						|
    /**
 | 
						|
     * Retrieves the last MySQL error.
 | 
						|
     *
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    abstract public function getLastError();
 | 
						|
    /**
 | 
						|
     * Handles a SQL-Error
 | 
						|
     *
 | 
						|
     * @param string $errmsg
 | 
						|
     * @param int    $errno
 | 
						|
     * @throws MsdEception
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function sqlError ($errmsg, $errno)
 | 
						|
    {
 | 
						|
        throw new Msd_Exception($errmsg, $errno);
 | 
						|
    }
 | 
						|
}
 |