111 lines
3.3 KiB
PHP
111 lines
3.3 KiB
PHP
<?php
|
|
class DatabaseConnection
|
|
{
|
|
private $strConnection;
|
|
private $pdo;
|
|
|
|
public function __construct($strConnection, $strUsername = null, $strPassword = null)
|
|
{
|
|
$this->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;
|
|
}
|
|
}
|
|
?>
|