GuardiansWish |
03-24-2013 04:18 PM |
SERIOUS problems with Chibifurs
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.
|