98 lines
1.8 KiB
PHP
98 lines
1.8 KiB
PHP
|
<?php
|
||
|
|
||
|
class Database {
|
||
|
static private $instance;
|
||
|
|
||
|
private $dbh;
|
||
|
private $stats;
|
||
|
private $result;
|
||
|
|
||
|
static function getInstance() {
|
||
|
if (!isset(self::$instance))
|
||
|
self::$instance = new Database();
|
||
|
|
||
|
return self::$instance;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* TODO: errorhandling?
|
||
|
*/
|
||
|
private function __construct() {
|
||
|
$this->dbh = mysql_pconnect(DB_HOST, DB_USER, DB_PASS);
|
||
|
mysql_select_db(DB_NAME, $this->dbh);
|
||
|
|
||
|
$stats = array();
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* TODO: errorhandling?
|
||
|
*/
|
||
|
function query($sql) {
|
||
|
$start = microtime(true);
|
||
|
$this->result = mysql_query($sql, $this->dbh);
|
||
|
$error = mysql_error($this->dbh);
|
||
|
$end = microtime(true);
|
||
|
$this->stats[] = array('query' => $sql, 'error' => $error, 'time' => $end - $start);
|
||
|
return $this->result;
|
||
|
}
|
||
|
|
||
|
function fetch_assoc() {
|
||
|
return mysql_fetch_assoc($this->result);
|
||
|
}
|
||
|
|
||
|
function fetch_array() {
|
||
|
return mysql_fetch_array($this->result);
|
||
|
}
|
||
|
|
||
|
function fetch_row() {
|
||
|
return mysql_fetch_row($this->result);
|
||
|
}
|
||
|
|
||
|
function num_rows() {
|
||
|
return mysql_num_rows($this->result);
|
||
|
}
|
||
|
|
||
|
function insert_id() {
|
||
|
return mysql_insert_id();
|
||
|
}
|
||
|
|
||
|
function affected_rows() {
|
||
|
return mysql_affected_rows($this->result);
|
||
|
}
|
||
|
|
||
|
static function getQueryStats() {
|
||
|
$sum = 0;
|
||
|
$errors = 0;
|
||
|
$stats = self::$instance->stats;
|
||
|
unset($stats['last']);
|
||
|
|
||
|
if (count($stats) > 0) {
|
||
|
foreach ($stats as $key => $val) {
|
||
|
$sum += $val['time'];
|
||
|
|
||
|
if (!empty($val['error']))
|
||
|
$errors++;
|
||
|
}
|
||
|
|
||
|
foreach ($stats as $key => $val)
|
||
|
$stats[$key]['percent'] = round($val['time'] / $sum, 2);
|
||
|
}
|
||
|
|
||
|
$stats['last'] = array('count' => count($stats), 'errors' => $errors, 'sum' => round($sum, 4));
|
||
|
return $stats;
|
||
|
}
|
||
|
|
||
|
static function resetQueryStats() {
|
||
|
unset($instance->stats);
|
||
|
}
|
||
|
|
||
|
function close($force = false) {
|
||
|
if ($force) {
|
||
|
mysql_close($instance->dbh);
|
||
|
unset($instance);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
?>
|