strConnection = $strConnection; // 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()); if (count($varArgs) < 1) throw new Exception("query takes at least one argument, the query!"); $strQuery = array_shift($varArgs); $strQuery = file_exists("db/{$strQuery}")? file_get_contents("db/{$strQuery}") : $strQuery; if (preg_match("/^sqlsrv/", $this->strConnection)) $strQuery = "set nocount on; {$strQuery}"; $varStatement = $this->pdo->prepare($strQuery); if (count($varArgs) > 0) $varStatement->execute($varArgs); else $varStatement->execute(); $varTemp = array(); $varOutput = array(); // Engines that do not support multiple rowsets: if (preg_match("/^(sqlite)/", $this->strConnection)) { while ($varRow = $varStatement->fetch()) { $varNewRow = array(); foreach ($varRow as $k => $v) if (!is_numeric($k)) $varNewRow[$k] = $v; $varOutput[] = $varNewRow; } return $varOutput; } do { try { $varTemp[] = $varStatement->fetchAll(); } catch (Exception $x) {} } while ($varStatement->nextRowset()); foreach ($varTemp as $i => $varSet) foreach ($varSet as $j => $varRow) { $varNewRow = array(); foreach ($varRow as $k => $v) if (!is_numeric($k)) $varNewRow[$k] = $v; $varOutput[] = $varNewRow; } return $varOutput; } } ?>