1
0
Fork 0
MySQLDumper/library/Msd/Db.php

347 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);
}
}