.
***************************************************************************/
class DBConnection {
/**
* Connection link.
* @var string
*/
private $connection;
/**
* Keeps the info of the last used connection.
* @var string
*/
private $last_connection=null;
/**
* Keeps the info of the last used MySQL query.
* @var string
*/
private $msql='';
/**
* Returns the text of the error message from last MySQL operation.
* @var string
*/
private $error='';
/**
* Returns the numerical value of the error message from last MySQL operation.
* @var integer
*/
private $errno='';
/**
* Is there any locked tables right now?
* @var boolean
*/
private $is_locked=false;
/**
* The Constructor. Initializes a database connection and selects database.
* @param string Database host
* @param string Database username
* @param string Database password
* @param string Database name
*
* @return boolean
*/
function DBConnection($db_host='', $db_user='', $db_pass='', $db_name='') {
$this->connection=mysql_connect($db_host, $db_user, $db_pass);
if ($this->connection){
if (mysql_select_db($db_name, $this->connection)){
$this->last_connection=&$this->connection;
return $this->connection;
}else{ // if we can't select the database
$this->display_errors('- Could not select database: '.$db_name.'');
return false;
}
}else{ // if we couldn't connect to the database
$this->display_errors('- Could not connect to database: '.$db_name.'');
return false;
}
}
/**
* Send a MySQL query.
* @param string Query to run
* @return mixed
*/
function rq($msql) {
$this->last_connection=&$this->connection;
$this->msql=&$msql;
$result=mysql_query($msql, $this->connection);
if ($result){
$this->queries_count++;
return $result;
}else{
$this->display_errors();
return false;
}
}
/**
* Fetch a result row as an associative array.
* @param string The query which we send.
* @return array
*/
function fetch($query) {
return mysql_fetch_assoc($query);
}
/**
* Fetch a result row as an object
* @param string The query which we send.
* @return array
*/
function ofetch($query) {
return mysql_fetch_object($query);
}
/**
* Fetch a result row as an associative array, a numeric array, or both.
* @param string The query which we send.
* @return array
*/
function afetch($query) {
return mysql_fetch_array($query);
}
/**
* Returns the number of rows from the executed query.
* @param string The query result.
* @return integer
*/
function num_rows($result) {
return mysql_num_rows($result);
}
/**
* Retuns the number of rows affected bt last used query.
* @return integer
*/
function affected_rows() {
return mysql_affected_rows($this->last_connection);
}
/**
* Returns the total number of executed queries. Usually goes to the end of scripts.
* @return integer
*/
function num_queries() {
return $this->queries_count;
}
/**
* Lock database table(s).
* @param array Array of table => Lock type
* @return void
*/
function lock_tables($tables) {
if (is_array($tables)&&count($tables)>0){
$msql='';
foreach ($tables as $name=>$type){
$msql.=(!empty($msql)?', ':'').''.$name.' '.$type.'';
}
$this->rq('LOCK TABLES '.$msql.'');
$this->is_locked=true;
}
}
/* Unlock database table(s) */
function unlock_tables() {
if ($this->is_locked){
$this->rq('UNLOCK TABLES');
$this->is_locked=false;
}
}
/**
* Returns the last unique ID (auto_increment field) from the last inserted row.
* @return integer
*/
function last_id() {
return mysql_insert_id($this->connection);
}
/**
* Escapes a value to make it safe for using in queries.
* @param string String to be escaped
* @param bool If escaping of % and _ is also needed
* @return string
*/
function string_escape($string, $full_escape=false) {
$string=stripslashes($string);
if ($full_escape) $string=str_replace(array('%', '_'), array('\%', '\_'), $string);
if (function_exists('mysql_real_escape_string')){
return mysql_real_escape_string($string, $this->connection);
}else{
return mysql_escape_string($string);
}
}
/**
* Free result memory.
* @param string The result which we want to release.
* @return boolean
*/
function free_result($result) {
return mysql_free_result($result);
}
/**
* Closes the MySQL connection.
* @param none
* @return boolean
*/
function close() {
$this->msql='';
return mysql_close($this->connection);
}
/**
* Returns the MySQL error message.
* @return string
*/
function error() {
$this->error=(is_null($this->last_connection))?'':mysql_error($this->last_connection);
return $this->error;
}
/**
* Returns the MySQL error number.
* @return string
*/
function errno() {
$this->errno=(is_null($this->last_connection))?0:mysql_errno($this->last_connection);
return $this->errno;
}
/**
* If database error occur, the script will be stopped and an error message displayed.
* @param string The error message. If it's empty, it will be created with $this->sql.
* @return string
*/
function display_errors($error_message='') {
if ($this->last_connection){
$this->error=$this->error($this->last_connection);
$this->errno=$this->errno($this->last_connection);
}
/** CHECK $_SERVER to add more details **/
if(!$error_message) $error_message='- Error in query: '.$this->msql;
$message=''.$error_message.'
'.(($this->errno!='')?'- Error: '.$this->error.' (Error #'.$this->errno.')
':'').'
- File: '.$_SERVER['SCRIPT_FILENAME'].'
';
die('Database problem occur, please try again later.
'.$message.'');
}
/*** Shortcut functions ***/
/**
* For fetching single row with possibility to enter conditions
*
* @param string From which table(s) to get result
* @param string What conditions to use
* @param string Which field to fetch. Very usable if you need to make JOINs
*
* @return mixed
*/
function getRow($table, $conditions='1', $select_what='*') {
$query='SELECT '.$select_what.' FROM '.$table.' WHERE '.$conditions;
$res=$this->rq($query);
$row=$this->fetch($res);
return $row;
}
}
?>