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();
}
}