<?php

/*
* Class written by Thomas Smit 13/07/06 - 21/07/06
* Rewritten (cleaned, extended) 23/11/06 - 24/11/06
*/

class mysql_cls
{

    private 
$queries 0;    // @var int $queries - query counter
    
protected $link;         // @var resource $link - hold MySQL link
    
protected $res;          // @var array $res - hold current MySQL result

    /*
    * mysql_cls::__construct() - connect to host and select database
    * @param str $host - database host
    * @param str $user - database user
    * @param str $password - database user password
    * @param str $db - database to connect to
    * @return void
    */

    
public function __construct($host$user$password$db)
    {
        
$link mysql_connect($host$user$password);
        if(
$link)
        {
            
$this->link $link;
            if(!
mysql_select_db($db$link))
                
trigger_error('Database ' $db ' could not be selected'E_USER_WARNING);
        }
    }

    
/*
    * mysql_cls::query() - perform a MySQL query
    * @param str $query - query to execute
    * @return void
    */

    
public function query($query)
    {
        
$result mysql_query($query);
        if(
$result)
        {
            
$this->res $result;
            
$this->queries++;
        }
        else
            
trigger_error(mysql_error(), E_USER_WARNING);
    }

    
/*
    * mysql_cls::insert() - formation of insert statement
    * @param str $table - table to insert into
    * @param array $array - associative array ('field' => 'value')
    * @param bool $sanitise - whether to sanitise or not
    * @return void
    */

    
public function insert($table$array$sanitise false)
    {
        if(!
is_array($array))
            
trigger_error('Values to insert must be passed as an array');
        else
        {
            foreach(
$array as $key => $value)
            {
                
$columns[] = '`' $key '`';
                
$values[] = ($sanitise) ? '\'' $this->sanitise($value) . '\'' '\'' $value '\'';
            }
            
$query 'INSERT INTO `' $table '` (' implode(', '$columns) . ') VALUES (' implode(', '$values) . ')';
            
$this->query($query);
        }
    }

    
/*
    * mysql_cls::update() - formation of update statement
    * @param str $table - table to update
    * @param array $array - associative array ('field' => 'value')
    * @param str $params - statement parameters (eg. WHERE `id` = 1)
    * @param bool $sanitise - whether to sanitise or not
    * @return void
    */

    
public function update($table$array$params NULL$sanitise false)
    {
        if(!
is_array($array))
            
trigger_error('Fields to update must be passed as an array');
        else
        {
            foreach(
$array as $key => $value)
            {
                
$val .= ($sanitise) ? '`' $key '` = \'' $this->sanitise($value) . '\', ' '`' $key '` = \'' $value '\', ';
            }
            
$query 'UPDATE `' $table '` SET ' substr($val0, -2) . ' ' $params;
            
$this->query($query);
        }
    }

    
/*
    * mysql_cls::select() - formation of select statement
    * @param str $table - table to insert into
    * @param array $fields - array of fields to select
    * @param str $params - statement parameters (eg. WHERE `id` = 1)
    * @return void
    */

    
public function select($table$fields$params NULL)
    {
        if(!
is_array($fields))
            
trigger_error('Fields to select must be passed as an array');
        else
        {
            
$query 'SELECT `' implode('`, `'$fields) . '` FROM `' $table '` ' $params;
            
$this->query($query);
        }
    }

    
/*
    * mysql_cls::delete() - formation of delete statement
    * @param str $table - table to insert into
    * @param str $params - statement parameters (eg. WHERE `id` = 1)
    * @return void
    */

    
public function delete($table$params NULL)
    {
        
$this->query('DELETE FROM `' $table '` ' $params);
    }

    
/*
    * mysql_cls::fetch() - return result array
    * @return array
    */

    
public function fetch()
    {
        return 
mysql_fetch_assoc($this->res);
    }

    
/*
    * mysql_cls::numrows() - return number of rows from query
    * @return int
    */

    
public function numrows()
    {
        return 
mysql_num_rows($this->res);
    }

    
/*
    * mysql_cls::sanitise() - sanitise user input
    * @param str $input - string to sanitise
    * @return str
    */

    
public function sanitise($input)
    {
        return 
mysql_real_escape_string(htmlentities($inputENT_QUOTES));
    }

    
/*
    * mysql_cls::querycount() - return query count
    * @return int
    */

    
public function querycount()
    {
        return 
$this->queries;
    }

    
/*
    * mysql_cls::__destruct() - disconnect from MySQL server
    * @return void
    */

    
public function __destruct()
    {
        
mysql_close($this->link);
    }

}

?>