<?php
/*
+----------------------------------------------------------------
|
| MJGUEST
| =============================================================
| Copyright (c) 2002-2008 Giacomo "mdsjack" Menni
| Terms of agreement and support at www.mdsjack.bo.it
|
+----------------------------------------------------------------
| [ DATABASE MODULE ]
| Database driver (MySQL 3.23+)
+----------------------------------------------------------------
*/
class db_driver
{
var $__id;
var $__query;
var $__lastquestion;
var $driver = 'MySQL'; # const
var $answer = '';
var $tot_queries = 0;
var $error = false;
var $tables = array();
var $questions = array
( 'truncate' => 'TRUNCATE %s'
, 'optimize' => 'OPTIMIZE TABLE %s'
, 'row_delete' => 'DELETE FROM %s WHERE %s=\'%s\''
, 'row_count' => 'SELECT COUNT(*) FROM %s'
, 'row_add' => 'INSERT INTO %s VALUES()'
, 'settings_load' => 'SELECT * FROM [TBL=settings]'
, 'settings_update' => 'UPDATE [TBL=settings] SET adminpass=\'%s\', adminmail=\'%s\', timezone=%d, dateformat=\'%s\', theme=\'%s\', entriesxpage=\'%u\', wordfilter=\'%b\', title=\'%s\', namelen=\'%u\', msglen=\'%u\', emoticons=\'%u\', avatars_maxkilobytes=\'%u\', redirectscreen=\'%b\', notifynewentry=\'%b\', captcha=\'%b\', messenger=\'%b\', entry_approval=\'%b\', mod_account=\'%b\', modpass=\'%s\', modmail=\'%s\', rating=\'%b\', banned=\'%s\', name_admin=\'%s\', name_mod=\'%s\' '
, 'settings_restore' => 'UPDATE [TBL=settings] SET adminpass=DEFAULT, adminmail=DEFAULT, timezone=DEFAULT, dateformat=DEFAULT, theme=DEFAULT, entriesxpage=DEFAULT, wordfilter=DEFAULT, title=DEFAULT, namelen=DEFAULT, msglen=DEFAULT, emoticons=DEFAULT, avatars_maxkilobytes=DEFAULT, redirectscreen=DEFAULT, notifynewentry=DEFAULT, captcha=DEFAULT, messenger=DEFAULT, entry_approval=DEFAULT, mod_account=DEFAULT, modpass=DEFAULT, modmail=DEFAULT, rating=DEFAULT, banned=DEFAULT, name_admin=DEFAULT, name_mod=DEFAULT '
, 'entry_add' => 'INSERT INTO [TBL=entries] VALUES(NULL, \'%s\', \'%b\', \'%s\',\'%s\', %u, \'%s\', \'%s\', \'%s\', \'%s\',\'%s\',\'%s\',\'%s\', \'\', \'%b\', \'%u\')'
, 'entry_get_set' => 'SELECT id, ip, pvt, name, country, datetime, message, dir, email, web, chat, uin, LENGTH(avatar) AS avatar, reply, approved, rating FROM [TBL=entries] %§ ORDER BY id DESC LIMIT %u,%u'
, 'entry_get_one' => 'SELECT pvt, name, country, message, dir, email, web, chat, uin, LENGTH(avatar) AS avatar, reply, rating FROM [TBL=entries] WHERE id=%u'
, 'entry_edit' => 'UPDATE [TBL=entries] SET pvt=\'%b\', name=\'%s\', country=\'%s\', message=\'%s\', dir=\'%s\', email=\'%s\', web=\'%s\', chat=\'%s\', uin=\'%s\', rating=\'%u\' %§ WHERE id=%u'
, 'get_avatar' => 'SELECT avatar FROM [TBL=entries] WHERE id=%u'
, 'check_flood' => 'SELECT MAX(datetime) FROM [TBL=entries] WHERE ip=\'%s\''
, 'reply_save' => 'UPDATE [TBL=entries] SET reply=\'%s\' WHERE id=%u'
, 'approve' => 'UPDATE [TBL=entries] SET approved=\'1\' WHERE id=%u'
, 'ban_guest' => 'UPDATE [TBL=settings] SET banned=\'%s\''
, 'rating_stats' => 'SELECT AVG(rating) AS avg, COUNT(rating) AS tot FROM [TBL=entries] WHERE rating != 0'
);
function db_driver()
{
$this->tables = array
( '[TBL=entries]' => db_flag.'entries'
, '[TBL=settings]' => db_flag.'settings'
);
$this->open();
}
function ask($question, $sql = null, $params = array())
{
# $params = func_get_args();
$this->__lastquestion = $question;
$this->query(strtr(vsprintf(str_replace('%§', $sql, $this->questions[$this->__lastquestion]), $params), $this->tables));
return true;
}
function get_field($num = 0)
{
$this->answer = @mysql_fetch_row($this->__query);
return ($this->answer ? $this->answer[$num] : $this->__error());
}
function get_row()
{
$this->answer = @mysql_fetch_assoc($this->__query);
return ($this->answer ? true : $this->__error());
}
function open($persistance = 1)
{
$host = (db_port == '') ? db_host : (db_host.':'.db_port);
$this->__id = ($persistance) ? @mysql_connect($host, db_user, db_pass) : @mysql_pconnect($host, db_user, db_pass);
unset($host);
@mysql_select_db(db_name, $this->__id);
return ($this->__id ? true : $this->__error());
}
function __error()
{
if($this->error == true) return false;
$errno = mysql_errno();
if ($errno != 0):
echo "
<h3>Database Error!</h3>
<strong>Module:</strong> ".db_type."<br />
<strong>Error (#{$errno} - ".$this->__lastquestion."):</strong> ".mysql_error();
$this->error = true;
return false;
endif;
return true;
}
function close()
{
@mysql_close($this->__id);
unset($this->__id);
}
function query($sql)
{
$this->__query = @mysql_unbuffered_query($sql, $this->__id);
/*
switch ($buffer):
case 0:
$this->__query = @mysql_unbuffered_query($sql, $this->__id);
break;
case 1:
$this->__query = @mysql_query($sql, $this->__id);
break;
endswitch;
*/
$this->tot_queries++;
return ($this->__query ? true : $this->__error());
}
function escape($raw_data)
{
return mysql_escape_string($raw_data);
}
function sql($sqlfile)
{
$sql = explode(';', str_replace(array('mjguest_', "\r\n"), array(db_flag, ' '), file_get_contents($sqlfile)));
foreach ($sql as $query)
if (!empty($query))
if ($this->query($query) == false)
break;
$this->__error();
}
function free_memory()
{
mysql_free_result($this->__query);
unset($this->__query);
}
}
?>