Okay for the past three months, Chibifurs has been dealing with some severe code issues. As seen here: 
http://www.chibifurs.com/ we are unable to get into the adopts half of the site. We have gone through the rings with our service providers who have essentially told us to come to you. I have included all screenshots and discussions we have had with them to help.
-----------------------------------
30 Dec. 
Hi ----,
This is the error that comes about when an existing site (one with a valid /home/chibifur/public_html/classes/class_database.php ) points to a database that no longer exists.
Check /home/chibifur/public_html/classes/class_database.php and make sure that the database listed in there is able to be connected .
Regards,
Arun
----------------
Our response back:
http://fc03.deviantart.net/fs70/f/20...sh-d5pukij.png
Our uploaded file:
	PHP Code:
	
		
			
<?php
class Database extends PDO{
    /**
     * Tables' prefix
     *
     * @access private
     * @var string
     */
    private $_prefix;
    /**
     * Keep track of total rows from each query
     *
     * @access private
     * @var array
     */
    private $_total_rows = array();
    /**
     * Stores join table
     *
     * @access private
     * @var array
     */
    private $_joins = array();
    /**
     * If you don't know what this is, you shouldn't be here
     *
     * @param string $dbname
     * @param string $host
     * @param string $user
     * @param string $password
     * @param string $prefix    Tables' prefix
     * @access public
     */
    public function __construct($dbname, $host, $user, $password, $prefix = 'adopts_')
    {
        parent::__construct('mysql:host=' . $host . ';dbname=' . $dbname, $user, $password);
        $this->_prefix = $prefix;
    }
    /**
     * Basic INSERT operation
     *
     * @param string $tableName
     * @param array  $data         A key-value pair with keys that correspond to the fields of the table
     * @access public
     * @return object
     */
    public function insert($tableName, array $data)
    {
        return $this->_query($tableName, $data, 'insert');
    }
    /**
     * Basic UPDATE operation
     *
     * @param string $tableName
     * @param array  $data         A key-value pair with keys that correspond to the fields of the table
     * @access public
     * @return object
     */
    public function update($tableName, array $data, $clause = NULL)
    {
        return $this->_query($tableName, $data, 'update', $clause);
    }
    /**
     * Basic SELECT operation
     *
     * @param string $tableName
     * @param array  $data        A key-value pair with values that correspond to the fields of the table
     * @param string $clause    Clauses for creating advance queries with JOINs, WHERE conditions, and whatnot
     * @access public
     * @return object
     */
    public function select($tableName, array $data, $clause = NULL)
    {
        return $this->_query($tableName, $data, 'select', $clause);
    }
    /**
     * Basic DELETE operation
     *
     * @param string $tableName
     * @param string $clause    Clauses for creating advance queries with JOINs, WHERE conditions, and whatnot
     * @access public
     * @return object
     */
    public function delete($tableName, $clause = NULL)
    {
        return $this->_query($tableName, array(), 'delete', $clause);
    }
    /**
     * Adds JOIN to the next SELECT operation
     *
     * @param string $tableName
     * @param string $cond
     * @access public
     * @return object
     */
    public function join($tableName, $cond)
    {
        $this->_joins[] = array($tableName, $cond);
        return $this;
    }
    /**
     * Get total rows affected by previous queries
     *
     * @param int    $index
     * @return int
     */
    public function get_total_rows($index)
    {
        if ($index < 0)
        {
            return $this->_total_rows[count($this->_total_rows) + $index];
        }
        return $this->_total_rows[$index];
    }
    /**
     * Handles queries
     *
     * @param string $tableName
     * @param array  $data         A key-value pair with keys that correspond to the fields of the table
     * @param string $operation Defines what kind of operation we'll carry on with the database
     * @access private
     * @return object
     */
    private function _query($tableName, array $data, $operation, $clause = NULL)
    {
        if ( ! is_string($tableName))
        {
            throw new Exception('Argument 1 to ' . __CLASS__ . '::' . __METHOD__ . ' must be a string');
        }
        if ( ! in_array($operation, array('insert', 'update', 'select', 'delete')))
        {
            throw new Exception('Unkown database operation.');
        }
        $query = call_user_func_array(array(&$this, '_' . $operation . '_query'), array($tableName, &$data));
        if ( ! empty($clause))
        {
            $query .= ' WHERE ' . $clause;
        }
        //The comments can be removed for debugging purposes.
        //echo $query;
        $stmt = $this->prepare($query);
        $this->_bind_data($stmt, $data);
        if ( ! $stmt->execute())
        {
            $error = $stmt->errorInfo();
            throw new Exception('Database error ' . $error[1] . ' - ' . $error[2]);
        }
        $this->_total_rows[] = $stmt->rowCount();
        return $stmt;
    }
    /**
     * Generates prepared INSERT query string
     *
     * @param string $tableName
     * @param array  $data         A key-value pair with keys that correspond to the fields of the table
     * @access private
     * @return string
     */
    private function _insert_query($tableName, &$data)
    {
        $tableFields = array_keys($data);
        return 'INSERT INTO ' . $this->_prefix . $tableName . '
                  (`' . implode('`, `', $tableFields) . '`)
                  VALUES (:' . implode(', :', $tableFields) . ')';
    }
    /**
     * Generates prepared UPDATE query string
     *
     * @param string $tableName
     * @param array  $data         A key-value pair with keys that correspond to the fields of the table
     * @access private
     * @return string
     */
    private function _update_query($tableName, &$data)
    {
        $setQuery = array();
        foreach ($data as $field => &$value)
        {
            $setQuery[] = '`' . $field . '` = :' . $field;
        }
        return 'UPDATE ' . $this->_prefix . $tableName . '
                  SET ' . implode(', ', $setQuery);
    }
    /**
     * Generates prepared SELECT query string
     *
     * @param string $tableName
     * @param array  $data         A key-value pair with values that correspond to the fields of the table
     * @access private
     * @return string
     */
    private function _select_query($tableName, &$data)
    {
        $joins = '';
        if ( ! empty($this->_joins))
        {
            foreach ($this->_joins as $k => &$join)
            {
                $exploded = explode('=', $join[1]);
                $join_cond = '`' . $this->_prefix . implode('`.`', explode('.', trim($exploded[0]))) . '` = `' . $this->_prefix . implode('`.`', explode('.', trim($exploded[1]))) . '`';   
                $joins .= ' INNER JOIN `' . $this->_prefix . $join[0] . '` ON ' . $join_cond;
            }
            $this->_joins = NULL;
            $this->_joins = array();
        }
        $fields = empty($data) ? '*' : '`' . implode('`, `', array_values($data)) . '`';
        return 'SELECT ' . $fields . '
                  FROM `' . $this->_prefix . $tableName . '`' . $joins;
    }
    /**
     * Generates prepared DELETE query string
     *
     * @param string $tableName
     * @access private
     * @return string
     */
    private function _delete_query($tableName)
    {
        return 'DELETE FROM `' . $this->_prefix . $tableName . '`';
    }
    /**
     * Binds data to the prepared statement
     *
     * @param object $stmt A PDOStatement object
     * @param array  $data A key-value pair to be bound with the statement
     * @access private
     * @return object
     */
    private function _bind_data(&$stmt, &$data)
    {
        if ( ! empty($data))
        {
            foreach ($data as $field => &$value)
            {
                $stmt->bindParam(':' . $field, $value);
            }   
        }
        return $this;
    }
}
?>
		
	
 
Our base backup file (original):
	PHP Code:
	
		
			
<?php
class Database extends PDO{
    /**
     * Tables' prefix
     *
     * @access private
     * @var string
     */
    private $_prefix;
    /**
     * Keep track of total rows from each query
     *
     * @access private
     * @var array
     */
    private $_total_rows = array();
    /**
     * Stores join table
     *
     * @access private
     * @var array
     */
    private $_joins = array();
    /**
     * If you don't know what this is, you shouldn't be here
     *
     * @param string $dbname
     * @param string $host
     * @param string $user
     * @param string $password
     * @param string $prefix    Tables' prefix
     * @access public
     */
    public function __construct($dbname, $host, $user, $password, $prefix = 'adopts_')
    {
        parent::__construct('mysql:host=' . $host . ';dbname=' . $dbname, $user, $password);
        $this->_prefix = $prefix;
    }
    /**
     * Basic INSERT operation
     *
     * @param string $tableName
     * @param array  $data         A key-value pair with keys that correspond to the fields of the table
     * @access public
     * @return object
     */
    public function insert($tableName, array $data)
    {
        return $this->_query($tableName, $data, 'insert');
    }
    /**
     * Basic UPDATE operation
     *
     * @param string $tableName
     * @param array  $data         A key-value pair with keys that correspond to the fields of the table
     * @access public
     * @return object
     */
    public function update($tableName, array $data, $clause = NULL)
    {
        return $this->_query($tableName, $data, 'update', $clause);
    }
    /**
     * Basic SELECT operation
     *
     * @param string $tableName
     * @param array  $data        A key-value pair with values that correspond to the fields of the table
     * @param string $clause    Clauses for creating advance queries with JOINs, WHERE conditions, and whatnot
     * @access public
     * @return object
     */
    public function select($tableName, array $data, $clause = NULL)
    {
        return $this->_query($tableName, $data, 'select', $clause);
    }
    /**
     * Basic DELETE operation
     *
     * @param string $tableName
     * @param string $clause    Clauses for creating advance queries with JOINs, WHERE conditions, and whatnot
     * @access public
     * @return object
     */
    public function delete($tableName, $clause = NULL)
    {
        return $this->_query($tableName, array(), 'delete', $clause);
    }
    /**
     * Adds JOIN to the next SELECT operation
     *
     * @param string $tableName
     * @param string $cond
     * @access public
     * @return object
     */
    public function join($tableName, $cond)
    {
        $this->_joins[] = array($tableName, $cond);
        return $this;
    }
    /**
     * Get total rows affected by previous queries
     *
     * @param int    $index
     * @return int
     */
    public function get_total_rows($index)
    {
        if ($index < 0)
        {
            return $this->_total_rows[count($this->_total_rows) + $index];
        }
        return $this->_total_rows[$index];
    }
    /**
     * Handles queries
     *
     * @param string $tableName
     * @param array  $data         A key-value pair with keys that correspond to the fields of the table
     * @param string $operation Defines what kind of operation we'll carry on with the database
     * @access private
     * @return object
     */
    private function _query($tableName, array $data, $operation, $clause = NULL)
    {
        if ( ! is_string($tableName))
        {
            throw new Exception('Argument 1 to ' . __CLASS__ . '::' . __METHOD__ . ' must be a string');
        }
        if ( ! in_array($operation, array('insert', 'update', 'select', 'delete')))
        {
            throw new Exception('Unkown database operation.');
        }
        $query = call_user_func_array(array(&$this, '_' . $operation . '_query'), array($tableName, &$data));
        if ( ! empty($clause))
        {
            $query .= ' WHERE ' . $clause;
        }
        //The comments can be removed for debugging purposes.
        //echo $query;
        $stmt = $this->prepare($query);
        $this->_bind_data($stmt, $data);
        if ( ! $stmt->execute())
        {
            $error = $stmt->errorInfo();
            throw new Exception('Database error ' . $error[1] . ' - ' . $error[2]);
        }
        $this->_total_rows[] = $stmt->rowCount();
        return $stmt;
    }
    /**
     * Generates prepared INSERT query string
     *
     * @param string $tableName
     * @param array  $data         A key-value pair with keys that correspond to the fields of the table
     * @access private
     * @return string
     */
    private function _insert_query($tableName, &$data)
    {
        $tableFields = array_keys($data);
        return 'INSERT INTO ' . $this->_prefix . $tableName . '
                  (`' . implode('`, `', $tableFields) . '`)
                  VALUES (:' . implode(', :', $tableFields) . ')';
    }
    /**
     * Generates prepared UPDATE query string
     *
     * @param string $tableName
     * @param array  $data         A key-value pair with keys that correspond to the fields of the table
     * @access private
     * @return string
     */
    private function _update_query($tableName, &$data)
    {
        $setQuery = array();
        foreach ($data as $field => &$value)
        {
            $setQuery[] = '`' . $field . '` = :' . $field;
        }
        return 'UPDATE ' . $this->_prefix . $tableName . '
                  SET ' . implode(', ', $setQuery);
    }
    /**
     * Generates prepared SELECT query string
     *
     * @param string $tableName
     * @param array  $data         A key-value pair with values that correspond to the fields of the table
     * @access private
     * @return string
     */
    private function _select_query($tableName, &$data)
    {
        $joins = '';
        if ( ! empty($this->_joins))
        {
            foreach ($this->_joins as $k => &$join)
            {
                $exploded = explode('=', $join[1]);
                $join_cond = '`' . $this->_prefix . implode('`.`', explode('.', trim($exploded[0]))) . '` = `' . $this->_prefix . implode('`.`', explode('.', trim($exploded[1]))) . '`';   
                $joins .= ' INNER JOIN `' . $this->_prefix . $join[0] . '` ON ' . $join_cond;
            }
            $this->_joins = NULL;
            $this->_joins = array();
        }
        $fields = empty($data) ? '*' : '`' . implode('`, `', array_values($data)) . '`';
        return 'SELECT ' . $fields . '
                  FROM `' . $this->_prefix . $tableName . '`' . $joins;
    }
    /**
     * Generates prepared DELETE query string
     *
     * @param string $tableName
     * @access private
     * @return string
     */
    private function _delete_query($tableName)
    {
        return 'DELETE FROM `' . $this->_prefix . $tableName . '`';
    }
    /**
     * Binds data to the prepared statement
     *
     * @param object $stmt A PDOStatement object
     * @param array  $data A key-value pair to be bound with the statement
     * @access private
     * @return object
     */
    private function _bind_data(&$stmt, &$data)
    {
        if ( ! empty($data))
        {
            foreach ($data as $field => &$value)
            {
                $stmt->bindParam(':' . $field, $value);
            }   
        }
        return $this;
    }
}
?>
		
	
 --------------------------------------
30 Dec. 
Hi,
Please be informed that the database table chibifur_adopts2.adopts_settings is missing in your database .
Please restore your complete database.
Regards,
Diwakar
--------------------------------------
It wasn't there. I re-uploaded it from one of my backups. 
http://fc09.deviantart.net/fs70/f/20...sh-d5qpmur.png
---------------------------------------
Hi ,
We have checked your database but the Table 'chibifur_adopts2.adopts_settings' does not exist in it.
But /home/chibifur/public_html/classes/class_database.php script requires such a table.
Please contact your developer regarding this.
Regards,
Diwakar
---------------------------------------
We are now at the point where we may have to close down the site because of all of this and are begging for help.