host = $host; $this->db_username = $db_username; $this->db_name = $db_name; $this->db_password = 'hidden'; //no error if (defined('MYSQL_NO_ERRORS')) { $this->show_errors = false; } $this->connect_id = @mysql_connect($this->host, $this->db_username, $db_password, $new_link) or die($this->error_msg('we can not connect to the server ...')); if ($this->connect_id) { //loggin -> connecting kleeja_log('[Connected] : ' . kleeja_get_page()); if (! empty($db_name)) { $dbselect = @mysql_select_db($this->db_name) or die($this->error_msg('we can not select database')); if ($dbselect) { //login -> selecting database kleeja_log('[Selected Database] :' . $this->connect_id); if ((! preg_match('/utf/i', strtolower($script_encoding)) && ! defined('IN_LOGINPAGE') && ! defined('IN_ADMIN_LOGIN') && ! defined('DISABLE_INTR')) || ((empty($script_encoding) || preg_match('/utf/i', strtolower($script_encoding)) || defined('DISABLE_INTR')))) { if (mysql_query("SET NAMES 'utf8'")) { //loggin -> set utf8 kleeja_log('[Set to UTF8] :' . $this->connect_id); } } } elseif (! $dbselect) { //loggin -> no database -> close connection $this->close($this->connect_id); $this->connect_id = $dbselect; } } return $this->connect_id; } else { return false; } } // close the connection public function close() { if ( $this->connect_id ) { // Commit any remaining transactions if ( $this->in_transaction ) { mysql_query('COMMIT', $this->connect_id); } //loggin -> close connection kleeja_log('[Closing connection] :' . kleeja_get_page()); return @mysql_close($this->connect_id); } else { return false; } } // encoding functions public function set_utf8() { return $this->set_names('utf8'); } public function set_names($charset) { @mysql_query("SET NAMES '" . $charset . "'", $this->connect_id); } public function client_encoding() { return mysql_client_encoding($this->connect_id); } public function mysql_version() { //version of mysql $vr = $this->query('SELECT VERSION() AS v'); $vs = $this->fetch_array($vr); $vs = $vs['v']; return preg_replace('/^([^-]+).*$/', '\\1', $vs); } /* the query func . its so important to do the quries and give results */ public function query($query, $transaction = false) { //no connection if (! $this->connect_id) { return false; } // // Remove any pre-existing queries // unset($this->result); if (! empty($query)) { //debug .. ////////////// $srartum_sql = get_microtime(); //////////////// if ( $transaction == 1 && ! $this->in_transaction ) { $result = mysql_query('BEGIN', $this->connect_id); if (! $result) { return false; } $this->in_transaction = true; } $this->result = mysql_query($query, $this->connect_id); //debug .. ////////////// $this->debugr[$this->query_num+1] = [$query, sprintf('%.5f', get_microtime() - $srartum_sql)]; //////////////// if (! $this->result) { $this->error_msg('Error In query'); } else { //let's debug it kleeja_log('[Query] : --> ' . $query); } } else { if ( $transaction == 2 && $this->in_transaction ) { $this->result = mysql_query('COMMIT', $this->connect_id); } } //is there any result if ($this->result) { if ($transaction == 2 && $this->in_transaction) { $this->in_transaction = false; if (! mysql_query('COMMIT', $this->connect_id)) { mysql_query('ROLLBACK', $this->connect_id); return false; } } $this->query_num++; return $this->result; } else { if ( $this->in_transaction ) { mysql_query('ROLLBACK', $this->connect_id); $this->in_transaction = false; } return false; } } // query build public function build($query) { $sql = ''; if (isset($query['SELECT'])) { $sql = 'SELECT ' . $query['SELECT'] . ' FROM ' . $query['FROM']; if (isset($query['JOINS'])) { foreach ($query['JOINS'] as $cur_join) { $sql .= ' ' . key($cur_join) . ' ' . @current($cur_join) . ' ON ' . $cur_join['ON']; } } if (! empty($query['WHERE'])) { $sql .= ' WHERE ' . $query['WHERE']; } if (! empty($query['GROUP BY'])) { $sql .= ' GROUP BY ' . $query['GROUP BY']; } if (! empty($query['HAVING'])) { $sql .= ' HAVING ' . $query['HAVING']; } if (! empty($query['ORDER BY'])) { $sql .= ' ORDER BY ' . $query['ORDER BY']; } if (! empty($query['LIMIT'])) { $sql .= ' LIMIT ' . $query['LIMIT']; } } elseif (isset($query['INSERT'])) { $sql = 'INSERT INTO ' . $query['INTO']; if (! empty($query['INSERT'])) { $sql .= ' (' . $query['INSERT'] . ')'; } $sql .= ' VALUES(' . $query['VALUES'] . ')'; } elseif (isset($query['UPDATE'])) { $query['UPDATE'] = $query['UPDATE']; if (isset($query['PARAMS']['LOW_PRIORITY'])) { $query['UPDATE'] = 'LOW_PRIORITY ' . $query['UPDATE']; } $sql = 'UPDATE ' . $query['UPDATE'] . ' SET ' . $query['SET']; if (! empty($query['WHERE'])) { $sql .= ' WHERE ' . $query['WHERE']; } } elseif (isset($query['DELETE'])) { $sql = 'DELETE FROM ' . $query['DELETE']; if (! empty($query['WHERE'])) { $sql .= ' WHERE ' . $query['WHERE']; } } elseif (isset($query['REPLACE'])) { $sql = 'REPLACE INTO ' . $query['INTO']; if (! empty($query['REPLACE'])) { $sql .= ' (' . $query['REPLACE'] . ')'; } $sql .= ' VALUES(' . $query['VALUES'] . ')'; } return $this->query($sql); } // free the memmory from the last results public function free($query_id = 0) { return $this->freeresult($query_id); } public function freeresult($query_id = 0) { if (! $query_id) { $query_id = $this->result; } if ($query_id) { mysql_free_result($query_id); return true; } else { return false; } } /* * if the result is an arry , * this func is so important to order them as a array */ public function fetch($query_id = 0) { return $this->fetch_array($query_id); } public function fetch_array($query_id = 0) { if ( ! $query_id ) { $query_id = $this->result; } return $query_id ? mysql_fetch_array($query_id, MYSQL_ASSOC) : false; } /* * if we have a result and we have to know * the number of it , this is a func .. */ public function num_rows($query_id = 0) { if ( ! $query_id ) { $query_id = $this->result; } return $query_id ? mysql_num_rows($query_id) : false; } // last id inserted in sql public function insert_id() { return ($this->connect_id) ? mysql_insert_id($this->connect_id) : false; } // clean the qurery before insert it public function escape($msg) { $msg = htmlspecialchars($msg, ENT_QUOTES); //$msg = (!get_magic_quotes_gpc()) ? addslashes ($msg) : $msg; $msg = $this->real_escape($msg); return $msg; } // real escape .. public function real_escape($msg) { if (is_array($msg)) { return ''; } elseif (function_exists('mysql_real_escape_string')) { if (! $this-connect_id) { return 0; } return mysql_real_escape_string($msg, $this->connect_id); } else { // because mysql_escape_string doesnt escape % & _[php.net/mysql_escape_string] //return addcslashes(mysql_escape_string($msg),'%_'); return mysql_escape_string($msg); } } // get affected records public function affected() { return ( $this->connect_id ) ? mysql_affected_rows($this->connect_id) : false; } // get the information of mysql server public function server_info() { return 'MySQL ' . $this->mysql_version; } // error message func public function error_msg($msg) { global $dbprefix; if (! $this->show_errors) { return false; } $error_no = mysql_errno(); $error_msg = mysql_error(); $error_sql = @current($this->debugr[$this->query_num+1]); //some ppl want hide their table names, not in develoment stage if (! defined('DEV_STAGE')) { $error_sql = preg_replace("#\s{1,3}`*{$dbprefix}([a-z0-9]+)`*\s{1,3}#e", "' ' . substr('$1', 0, 1) . ' '", $error_sql); $error_msg = preg_replace("#{$this->db_name}.{$dbprefix}([a-z0-9]+)#e", "' ' . substr('$1', 0, 1) . ' '", $error_msg); $error_sql = preg_replace("#\s{1,3}(from|update|into)\s{1,3}([a-z0-9]+)\s{1,3}#ie", "' $1 ' . substr('$2', 0, 1) . ' '", $error_sql); $error_msg = preg_replace("#\s{1,3}(from|update|into)\s{1,3}([a-z0-9]+)\s{1,3}#ie", "' $1 ' . substr('$2', 0, 1) . ' '", $error_msg); $error_msg = preg_replace("#\s'([^']+)'@'([^']+)'#ie", "' hidden@$2 '", $error_msg); $error_sql = preg_replace("#password\s*=\s*'[^']+'#i", "password='hidden'", $error_sql); } //is this error related to updating? $updating_related = false; if (strpos($error_msg, 'Unknown column') !== false) { $updating_related = true; } echo '