!defined('DB_LOG_ERRORS') ? define('DB_LOG_ERRORS', 0) : '';
!defined('DB_ERROR_LOG_TABLE') ? define('DB_ERROR_LOG_TABLE', '_mysql_errors') : '';
!defined('DB_DISPLAY_ERRORS') ? define('DB_DISPLAY_ERRORS', 1) : '';
!defined('DB_EXIT_AFTER_ERROR') ? define('DB_EXIT_AFTER_ERROR', 0) : '';
class dbManager {
static $db;
public $mysql_error, $mysql_errno;
private $totalQueries = 0;
private $errorQueries = 0;
private $sendMail = 0;
private $sendTO = 'ionut.bodea@iseom.com';
private $sendSubject = 'Mysql Error iseom.com';
private $log_error = 0;
private $dblink;
function __construct($host = '', $user = '', $pass = '', $database = '', $charset='utf8') {
if(strlen($host)) {
@$this->dblink = mysql_connect($host, $user, $pass);
if(!$this->dblink) {
echo 'Could not connect to database';
exit;
} elseif(strlen($database)) {
@$sdb = mysql_select_db($database);
if(!$sdb) {
echo 'Could not select database';
exit;
} else {
//$this->mysql_set_charset($charset, $this->dblink);
}
}
}
}
function mysql_set_charset($charset, $link_identifier = null)
{
if ($link_identifier == null) {
return mysql_query('SET CHARACTER SET "'.$charset.'"');
} else {
return mysql_query('SET CHARACTER SET "'.$charset.'"', $link_identifier);
}
}
function &getInstance() {
if(!is_object($this->db)) {
$this->db = new dbManager();
}
return $this->db;
}
function handleResult($rs, $q, $t) {
if($rs) {
if($this->log_error) {
$this->log_error = 0;
return false;
}
return $rs;
} else {
$er = mysql_error();
$er_no = mysql_errno();
$this->mysql_error = $er;
$this->mysql_errno = $er_no;
$this->errorQueries++;
if(DB_LOG_ERRORS) {
// log errors
$log = array();
$log[request_uri] = $_SERVER[HTTP_HOST] . $_SERVER[REQUEST_URI];
$log[request_method] = $_SERVER[REQUEST_METHOD];
$log[referer] = $_SERVER[HTTP_REFERER];
$log[useragent] = $_SERVER[HTTP_USER_AGENT];
$log[ip] = $_SERVER[REMOTE_ADDR];
$log[x_forwarded_for] = $_SERVER[HTTP_X_FORWARDED_FOR];
$log[php_file] = $_SERVER[SCRIPT_FILENAME];
$log[datetime] = date('Y-m-d H:i:s');
$log[query] = $q;
$log[error_msg] = $er;
$log[error_no] = $er_no;
$log[timp_executie] = $t;
if(!$this->log_error) {
$this->log_error = 1;
$this->insertAssoc(DB_ERROR_LOG_TABLE, $log, 2);
#return false;
} elseif($this->log_error) {
#return false;
}
}
if(DB_DISPLAY_ERRORS) {
echo 'Query: ' . $q;
echo '
';
echo 'Error['.$er_no.']: ' . $er . '';
echo '
';
}
if(DB_EXIT_AFTER_ERROR) {
echo 'mysql error encountered, exiting due to your application settings.';
exit;
}
return false;
}
}
function runQuery($q) {
$this->totalQueries++;
$t1 = $this->mtime_float();
$rs = @mysql_query($q);
$t2 = $this->mtime_float();
return $this->handleResult($rs, $q, $t2 - $t1);
}
function queryAssoc($q) {
$rs = $this->runQuery($q);
$ret = array();
if($rs) {
while($row = mysql_fetch_assoc($rs))
$ret[] = $row;
mysql_free_result($rs);
}
return $ret;
}
function queryRow($q) {
$rs = $this->runQuery($q);
$ret = array();
if($rs) {
return mysql_fetch_assoc($rs);
mysql_free_result($rs);
}
return $ret;
}
function queryScalar($q) {
$rs = $this->runQuery($q);
$ret = '';
if($rs) {
$row = mysql_fetch_row($rs);
$ret = $row[0];
mysql_free_result($rs);
}
return $ret;
}
function insertAssoc($t, $val, $escape_method = 1) {
$qx = array();
foreach($val as $k => $v) {
$v = $this->escapeData($v, $escape_method);
$qx[] = "`{$k}` = '{$v}'";
}
return $this->runQuery("INSERT INTO {$t} SET " . implode(', ', $qx));
}
function updateAssoc($t, $val, $id, $pri) {
$qx = array();
foreach($val as $k => $v) {
$v = $this->escapeData($v);
$qx[] = "`{$k}` = '{$v}'";
}
return $this->runQuery("UPDATE {$t} SET " . implode(', ', $qx) . " WHERE `{$pri}` = '{$id}'");
}
function updateBlind($t, $val) {
$qx = array();
foreach($val as $k => $v) {
$v = $this->escapeData($v);
$qx[] = "`{$k}` = '{$v}'";
}
return $this->runQuery("UPDATE {$t} SET " . implode(', ', $qx) );
}
function escapeData($c, $escape_method = 1) {
$c = trim($c);
if($escape_method == 1) {
if(!get_magic_quotes_gpc())
$c = addslashes($c);
} else {
$c = mysql_real_escape_string($c);
}
return $c;
}
function mtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
function getPri($t) {
$rs = $this->runQuery("SHOW COLUMNS FROM `{$t}`");
$ret = @mysql_fetch_assoc($rs);
if (is_array($ret)) {
$arr_k = array_keys($ret);
$arr_v = array_values($ret);
for ($i; $i