open(); } public function open(){ try { $this->db = new mysqli(DBHOST, DBUSER, DBPASSWORD, DBNAME); } catch (Exception $e){ failure("

".$e->getMessage()."

", '500 Server Failure', false, '

Failed to open database connection.

'); } if ( $this->db->connect_errno() ){ failure("

Can't connect to the database. MySQL gave this error code: " . $this->db->connect_errno . "

", '500 Server Failure', false, '

Connection to MySQL server failed.

'); } if ( ! $this->db->ping() ){ failure("

Can't reach MySQL server. Server says: " . $this->db->error . "

", '500 Server Failure', false, "

Can't reach MySQL server!

"); } if ( ! $this->db->set_charset(DBCHARSET) ){ failure("

Can't set " . DBCHARSET . " as the charset on your MySQL server.

" , '500 Server Failure', false, "

Setting Charset failed!

"); } } public function close(){ $this->db->close(); } public function check(){ if ( ! $this->db->ping() ){ return false; } return true; } # does a single MySQL query with output (SELECT, INSERT, UPDATE... ) public function doQuery($string){ if ( ! $this->check() ) return false; return $this->db->query($sql); } # does multiple queries WITHOUT output (INSERT, UPDATE, DELETE... ) public function execMultipleQueries($sql){ if ( ! $this->check() ) return false; $result = $this->db->multi_query($sql); if ( ! $result ) return false; do { if( ! $this->db->more_results() ) break; if ( ! $this->db->next_result() ){ if ( $this->db->error != "" ){ $res->free(); return false; } } } while (true); return true; } # code by WordPress. See @link https://core.trac.wordpress.org/browser/branches/4.0/src/wp-includes/wp-db.php#L1154 # syntax like sprintf() public function prepare( $query, $args ) { if ( is_null( $query ) ) return; // This is not meant to be foolproof -- but it will catch obviously incorrect usage. if ( strpos( $query, '%' ) === false ) { return false; } $args = func_get_args(); array_shift( $args ); // If args were passed as an array (as in vsprintf), move them up if ( isset( $args[0] ) && is_array($args[0]) ) $args = $args[0]; $query = str_replace( "'%s'", '%s', $query ); // in case someone mistakenly already singlequoted it $query = str_replace( '"%s"', '%s', $query ); // doublequote unquoting $query = preg_replace( '|(?_real_escape( $string ); } private function _real_escape( $string ){ return $this->db->real_escape_string($string); } # WordPress End public function createTables(){ $user_table = 'CREATE TABLE IF NOT EXISTS ' . DBPREFIX . 'user ( id INTEGER AUTO_INCREMENT NOT NULL, PRIMARY KEY(id), name VARCHAR(70), UNIQUE(name), password VARCHAR(70), UNIQUE(password), email VARCHAR(70), UNIQUE(email), invites INTEGER, inviter INTEGER, invitekey VARCHAR(70), UNIQUE(invitekey), status INTEGER, color_folder VARCHAR(70), color_file VARCHAR(70)) ENGINE=InnoDB;'; $files_table = 'CREATE TABLE IF NOT EXISTS ' . DBPREFIX . 'files ( files_id INTEGER AUTO_INCREMENT NOT NULL, PRIMARY KEY(files_id), parent INTEGER, owner INTEGER, name VARCHAR(70), type VARCHAR(70), mime VARCHAR(70), size INTEGER, visibility VARCHAR(70), hash VARCHAR(70), download_link VARCHAR(70), upload_time INTEGER, last_access INTEGER, FOREIGN KEY(files_id) REFERENCES user(id) ON DELETE CASCADE ) ENGINE=InnoDB;'; $banned_user_table = 'CREATE TABLE IF NOT EXISTS ' . DBPREFIX . 'banned_user ( banned_id INTEGER AUTO_INCREMENT NOT NULL, PRIMARY KEY(banned_id), login_attempts INTEGER, ip TEXT, session_id TEXT, time INTEGER, user INTEGER ) ENGINE=InnoDB;'; if ( ! $this->execMultipleQueries('BEGIN; '. $user_table . ' ' . $files_table . ' ' . $banned_user_table . ' END;') ) failure("

There was a problem during bootstrapping the database schema. " . $this->db->error . "

", '500 Server Failure', false, "

CREATE TABLE FAILED

"); } public function __destruct(){ $this->close(); } }