From ee5782877ca0586d57bfc09a8c11eb4a4fc2a719 Mon Sep 17 00:00:00 2001 From: flashwave Date: Sun, 8 Mar 2015 05:14:57 +0100 Subject: [PATCH] Partial database library addition, committing now to see what happens --- _sakura/components/database.php | 84 ---------- _sakura/components/database/mysql.php | 223 ++++++++++++++++++++++++++ _sakura/config/config.php | 1 + _sakura/sakura.php | 22 ++- 4 files changed, 239 insertions(+), 91 deletions(-) delete mode 100644 _sakura/components/database.php create mode 100644 _sakura/components/database/mysql.php 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'));