diff --git a/_sakura/components/database.php b/_sakura/components/database.php
deleted file mode 100644
index d98acfb..0000000
--- a/_sakura/components/database.php
+++ /dev/null
@@ -1,84 +0,0 @@
-initConnect(
- (
- Flashii::getConfig('db', 'unixsocket') ?
- $this->prepareSock(
- Flashii::getConfig('db', 'host'),
- Flashii::getConfig('db', 'database')
- ) :
- $this->prepareHost(
- Flashii::getConfig('db', 'host'),
- Flashii::getConfig('db', 'database'),
- (
- Flashii::getConfig('db', 'port') !== null ?
- Flashii::getConfig('db', 'port') :
- 3306
- )
- )
- ),
- Flashii::getConfig('db', 'username'),
- Flashii::getConfig('db', 'password')
- );
- }
-
- // Regular IP/Hostname connection method prepare function
- private function prepareHost($dbHost, $dbName, $dbPort = 3306) {
- $DSN = 'mysql:host=' . $dbHost . ';port=' . $dbPort . ';dbname=' . $dbName;
-
- return $DSN;
- }
-
- // Unix Socket connection method prepare function
- private function prepareSock($dbHost, $dbName) {
- $DSN = 'mysql:unix_socket=' . $dbHost . ';dbname=' . $dbName;
-
- return $DSN;
- }
-
- // Initialise connection using default PDO stuff
- private function initConnect($DSN, $dbUname, $dbPword) {
- try {
- // Connect to SQL server using PDO
- self::$sql = new PDO($DSN, $dbUname, $dbPword);
- } catch(PDOException $e) {
- // Catch connection errors
- trigger_error("SQL Connection Error: ". $e->getMessage());
- }
- return true;
- }
-
- // Fetch array from database
- public function fetchAll($table) {
- $query = self::$sql->prepare('SELECT * FROM `' . Flashii::getConfig('prefix') . $table . '`');
- $query->execute();
- $result = $query->fetchAll(PDO::FETCH_BOTH);
-
- return $result;
- }
-
-}
\ No newline at end of file
diff --git a/_sakura/components/database/mysql.php b/_sakura/components/database/mysql.php
new file mode 100644
index 0000000..e8d2eef
--- /dev/null
+++ b/_sakura/components/database/mysql.php
@@ -0,0 +1,223 @@
+PDO extension not loaded.');
+ }
+
+ // Initialise connection
+ self::initConnect(
+ (
+ Configuration::getLocalConfig('db', 'unixsocket') ?
+ self::prepareSock(
+ Configuration::getLocalConfig('db', 'host'),
+ Configuration::getLocalConfig('db', 'database')
+ ) :
+ self::prepareHost(
+ Configuration::getLocalConfig('db', 'host'),
+ Configuration::getLocalConfig('db', 'database'),
+ (
+ Configuration::getLocalConfig('db', 'port') !== null ?
+ Configuration::getLocalConfig('db', 'port') :
+ 3306
+ )
+ )
+ ),
+ Configuration::getLocalConfig('db', 'username'),
+ Configuration::getLocalConfig('db', 'password')
+ );
+
+ }
+
+ // Regular IP/Hostname connection method prepare function
+ private static function prepareHost($dbHost, $dbName, $dbPort = 3306) {
+
+ $DSN = 'mysql:host=' . $dbHost . ';port=' . $dbPort . ';dbname=' . $dbName;
+
+ return $DSN;
+
+ }
+
+ // Unix Socket connection method prepare function
+ private static function prepareSock($dbHost, $dbName) {
+
+ $DSN = 'mysql:unix_socket=' . $dbHost . ';dbname=' . $dbName;
+
+ return $DSN;
+
+ }
+
+ // Initialise connection using default PDO stuff
+ private static function initConnect($DSN, $dbUname, $dbPword) {
+
+ try {
+ // Connect to SQL server using PDO
+ self::$sql = new PDO($DSN, $dbUname, $dbPword);
+ } catch(PDOException $e) {
+ // Catch connection errors
+ die("
" . $e->getMessage() . "
");
+ }
+
+ return true;
+
+ }
+
+ // Fetch array from database
+ public static function fetch($table, $fetchAll = true, $data = null) {
+
+ // Begin preparation of the statement
+ $prepare = 'SELECT * FROM `' . Configuration::getLocalConfig('db', 'prefix') . $table . '`';
+
+ // If $data is set and is an array continue
+ if(is_array($data)) {
+
+ $prepare .= ' WHERE';
+
+ foreach($data as $key => $value) {
+ $prepare .= ' `'. $key .'` '. $value[1] .' :'. $key .($key == key(array_slice($data, -1, 1, true)) ? ';' : ' AND');
+ }
+
+ }
+
+ // Actually prepare the preration
+ $query = self::$sql->prepare($prepare);
+
+ // Bind those parameters if $data is an array that is
+ if(is_array($data)) {
+ foreach($data as $key => $value) {
+ $query->bindParam(':'. $key, $value[0]);
+
+ // Unset variables to be safe
+ unset($key);
+ unset($value);
+ }
+ }
+
+ // Execute the prepared statements with parameters bound
+ $query->execute();
+
+ // Do fetch or fetchAll
+ if($fetchAll)
+ $result = $query->fetchAll(PDO::FETCH_BOTH);
+ else
+ $result = $query->fetch(PDO::FETCH_BOTH);
+
+ // And return the output
+ return $result;
+
+ }
+
+ // Insert data to database
+ public static function insert($table, $data) {
+
+ // Begin preparation of the statement
+ $prepare = 'INSERT INTO `' . Configuration::getLocalConfig('db', 'prefix') . $table . '` ';
+
+ // Run the foreach statement twice for (`stuff`) VALUES (:stuff)
+ for($i = 0; $i < 2; $i++) {
+
+ $prepare .= '(';
+
+ // Do more shit, don't feel like describing this so yeah
+ foreach($data as $key => $value) {
+ $prepare .= ($i ? ':' : '`') . $key . ($i ? '' : '`') . ($key == key(array_slice($data, -1, 1, true)) ? '' : ', ');
+ }
+
+ $prepare .= ')' . ($i ? ';' : ' VALUES ');
+
+ }
+
+ // Actually prepare the preration
+ $query = self::$sql->prepare($prepare);
+
+ // Bind those parameters
+ foreach($data as $key => $value) {
+ $query->bindParam(':'. $key, $value);
+
+ // Unset variables to be safe
+ unset($key);
+ unset($value);
+ }
+
+ // Execute the prepared statements with parameters bound
+ $result = $query->execute();
+
+ // Return whatever can be returned
+ return $result;
+
+ }
+
+ // Update data in the database
+ public static function update($table, $data) {
+
+ // Begin preparation of the statement
+ $prepare = 'UPDATE `' . Configuration::getLocalConfig('db', 'prefix') . $table . '`';
+
+ // Run a foreach on $data and complete the statement
+ foreach($data as $key => $values) {
+
+ // Append WHERE or SET depending on where we are
+ $prepare .= ' '. ($key ? 'WHERE' : 'SET');
+
+ // Do this complicated shit, I barely know what's going on anymore but it works
+ foreach($values as $column => $column_data) {
+ $prepare .= ' `'. $column .'` '. ($key ? $column_data[1] : '=') .' :'. ($key ? 'w' : 's') .'_'. $column . ($column == key(array_slice($values, -1, 1, true)) ? ($key ? ';' : '') : ($key ? ' AND' : ','));
+ }
+
+ }
+
+ // Actually prepare the preration
+ $query = self::$sql->prepare($prepare);
+
+ // Seperate the foreaches for the SET and WHERE clauses because it's fucking it up for some odd reason
+ // Bind Set Clauses
+ foreach($data[0] as $key => $value) {
+ // Do the binding
+ $query->bindParam(':s_'. $key, $value);
+
+ // Unset variables to be safe
+ unset($key);
+ unset($value);
+ }
+ // Bind Where Clauses
+ foreach($data[1] as $key => $values) {
+ // Assign the array entry to a variable because fuck strict standards
+ $value = $values[0];
+
+ // Binding two electrifying memes
+ $query->bindParam(':w_'. $key, $value);
+
+ // Unset variables to be safe
+ unset($key);
+ unset($value);
+ unset($values);
+ }
+
+ // Execute the prepared statements with parameters bound
+ $result = $query->execute();
+
+ // Return whatever can be returned
+ return $result;
+
+ }
+
+}
diff --git a/_sakura/config/config.php b/_sakura/config/config.php
index c757510..c1d0c7b 100644
--- a/_sakura/config/config.php
+++ b/_sakura/config/config.php
@@ -4,6 +4,7 @@ $fiiConf = array(); // Define configuration array
// PDO Database Connection
$fiiConf['db'] = array();
+$fiiConf['db']['driver'] = 'mysql';
$fiiConf['db']['unixsocket'] = false;
$fiiConf['db']['host'] = 'localhost';
$fiiConf['db']['port'] = 3306;
diff --git a/_sakura/sakura.php b/_sakura/sakura.php
index 67910de..2aad456 100644
--- a/_sakura/sakura.php
+++ b/_sakura/sakura.php
@@ -14,15 +14,23 @@ define('SAKURA_VERSION', '20150221');
error_reporting(-1);
// Include Configuration
-require_once('config/config.php');
+require_once 'config/config.php';
-// Include Composer libraries
-require_once('vendor/autoload.php');
+// Include libraries
+require_once 'vendor/autoload.php';
+require_once 'components/SockBase.php';
+require_once 'components/SockHashing.php';
+require_once 'components/SockConfiguration.php';
+
+// Generate path to database driver
+$_DBNGNPATH = 'components/database/' . $fiiConf['db']['driver'] . '.php';
+
+// Include database driver
+if(file_exists($_DBNGNPATH))
+ require_once $_DBNGNPATH;
+else
+ die('Failed to load database driver.
');
-// Include Flashii components
-require_once('components/main.php');
-require_once('components/hashing.php');
-require_once('components/database.php');
// Set Error handler
set_error_handler(array('Flashii\Flashii', 'ErrorHandler'));