Rev 68 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
1
<?php
namespace PointedEars\PHPX\Db
;
class MySQLDB
extends Database
{
/**
* Database host
* @var string
*/
protected $_host;
/**
* Database port on the host
* @var int
*/
protected $_port;
/**
* MySQL Unix socket (shouldn't be used with host or port).
* @var string
*/
protected $_unix_socket;
/**
* Database name
* @var string
*/
protected $_dbname;
/**
* Username to access the database
* @var string
*/
protected $_username;
/**
* Password to access the database
* @var string
*/
protected $_password;
/**
* Optional charset parameter value
* @var string
*/
protected $_charset = null;
/**
* (non-PHPdoc)
* @see Database::_leftQuote
*/
protected $_leftQuote = '`';
/**
* (non-PHPdoc)
* @see Database::_rightQuote
*/
protected $_rightQuote = '`';
public function __construct
()
{
$dbconfig = $this->readConfig();
if ($dbconfig === false)
{
return;
}
if (isset($dbconfig['unix_socket']))
{
$this->_unix_socket
= $dbconfig['unix_socket'];
}
$this->_dsn
= "mysql:host={$this->_host}"
. (!is_null($this->_port
) ?
";port={$this->_port}" : '')
. (!is_null($this->_unix_socket
) ?
";unix_socket={$this->_unix_socket}" : '')
. (!is_null($this->_dbname
) ?
";dbname={$this->_dbname}" : '')
. (!is_null($this->_charset
) ?
";charset={$this->_charset}" : '');
if (!is_null($this->_charset
))
{
$this->_options
[\PDO
::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES " . $this->_charset
;
}
parent
::__construct
();
}
/**
* (non-PHPdoc)
* @see \PointedEars\PHPX\Db\Database::_columnDef()
*/
protected function _columnDef
(array $data, $columnName)
{
$standard_Def = parent
::_columnDef
($data, $columnName);
$mySQL_def = $standardDef
. (isset($data['format']) && $data['format'] ?
" COLUMN_FORMAT {$data['format']}" : '')
. (isset($data['storage']) && $data['storage'] ?
" STORAGE {$data['storage']}" : '');
return $mySQL_def;
}
/**
* Creates this MySQL database
*
* @param string $dsn
* Ignored. Required for strict compatibility only.
* @param string $username = null
* @param string $password = null
* @param array? $options = null
* Ignored. Required for strict compatibility only.
* @param string $dbspec = null
* Currently ignored.
* @param boolean $force = false
* @see Database::create()
*/
public function create
($dsn, $username = null, $password = null,
array $options = null, $dbspec = null, $force = false)
{
return parent
::create(
"mysql:host={$this->_host}"
. (!is_null($this->_charset
) ?
";charset={$this->_charset}" : ''),
$username, $password, null, $force);
}
/**
* Returns the date of last modification of this database or
* one of its tables.
*
* @param string $table (optional)
* Table name. If not provided, all tables of this database
* are considered.
* @return int|null
* Timestamp of last modification, or <code>null</code> if
* unavailable.
*/
public function getLastModified
($table = null)
{
$filter = array('TABLE_SCHEMA' => $this->_dbname
);
if ($table !== null)
{
$filter['TABLE_NAME'] = $table;
}
$times = $this->select(
'`information_schema`.`tables`',
array('CREATE_TIME', 'UPDATE_TIME'),
$filter,
array('UPDATE_TIME DESC', 'CREATE_TIME DESC'),
1
);
$modi = ($times ?
$times[0] : null);
if ($modi)
{
$modi = $modi['UPDATE_TIME'] ?
: $modi['CREATE_TIME'];
if ($modi)
{
$modi = strtotime($modi . ' GMT');
}
}
return $modi;
}
}