From 45a63e81db3f11a688f79a5d605d06d4d0ae4284 Mon Sep 17 00:00:00 2001 From: Conner Harkness Date: Tue, 24 Jun 2025 14:52:08 -0600 Subject: [PATCH] Consolidated DatabaseConnection class to be a PDO wrapper --- lib/DatabaseConnection.php | 110 ++++++++++++------------------------- 1 file changed, 35 insertions(+), 75 deletions(-) diff --git a/lib/DatabaseConnection.php b/lib/DatabaseConnection.php index cfb21d2..b166df3 100644 --- a/lib/DatabaseConnection.php +++ b/lib/DatabaseConnection.php @@ -1,55 +1,49 @@ strEngine = $strEngine; + $this->strConnection = $strConnection; - switch ($strEngine) - { - case "sqlsrv": - $this->pdo = new PDO( - "sqlsrv:Server={$strHost};Database={$strDatabaseName}", - $strUsername, - $strPassword); - break; - - case "mysql": - $this->pdo = new PDO( - "mysql:host={$strHost};dbname={$strDatabaseName}", - $strUsername, - $strPassword); - break; - - case "sqlite": - $strFileName = $strHost; - if ($strFileName == null || strlen($strFileName) < 1) - $strFileName = ":memory:"; - - $this->pdo = new PDO("sqlite:{$strFileName}"); - break; - - default: - throw new Exception("Unknown database engine {$strEngine}."); - } + // SQL Server: "sqlsrv:Server={$strHost};Database={$strDatabaseName}" + // MySQL: "mysql:host={$strHost};dbname={$strDatabaseName}" + // SQLite: "sqlite:{$strFileName}" + // SQLite: "sqlite::memory:" + $this->pdo = new PDO($strConnection, $strUsername, $strPassword); $this->pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } + private static function flatten(...$args) + { + if (is_null($args)) + return array(); + + if (count($args) > 0) + { + $varOutput = array(); + $varFirst = array_shift($args); + + if (is_array($varFirst)) + foreach ($varFirst as $varItem) + $varOutput = array_merge($varOutput, self::flatten($varItem)); + else + array_push($varOutput, $varFirst); + + if (count($args) > 0) + $varOutput = array_merge($varOutput, self::flatten($args)); + + return $varOutput; + } + else + return array(); + } + public function query($input) { $varArgs = self::flatten(func_get_args()); @@ -62,7 +56,7 @@ file_get_contents("db/{$strQuery}") : $strQuery; - if ($this->strEngine == "sqlsrv") + if (preg_match("/^sqlsrv/", $this->strConnection)) $strQuery = "set nocount on; {$strQuery}"; $varStatement = $this->pdo->prepare($strQuery); @@ -75,7 +69,7 @@ $varOutput = array(); // Engines that do not support multiple rowsets: - if (in_array($this->strEngine, array("sqlite"))) + if (preg_match("/^(sqlite)/", $this->strConnection)) { while ($varRow = $varStatement->fetch()) { @@ -112,39 +106,5 @@ return $varOutput; } - - // - // - // - // - // - // - // - - // Used to combine a mixture of values and arrays of values as one flat array of values in the order they arrive in. For example: self::flatten("a", ["b", "c", ["d", "e", "f"], "g"], "h") should return an array of ["a", "b", "c", "d", "e", "f", "g", "h"]. - private static function flatten(...$args) - { - if (is_null($args)) - return array(); - - if (count($args) > 0) - { - $varOutput = array(); - $varFirst = array_shift($args); - - if (is_array($varFirst)) - foreach ($varFirst as $varItem) - $varOutput = array_merge($varOutput, self::flatten($varItem)); - else - array_push($varOutput, $varFirst); - - if (count($args) > 0) - $varOutput = array_merge($varOutput, self::flatten($args)); - - return $varOutput; - } - else - return array(); - } } ?>