Fifth pass at adding key files
This commit is contained in:
406
site/roadshow/rating/classes/database.class.php
Normal file
406
site/roadshow/rating/classes/database.class.php
Normal file
@ -0,0 +1,406 @@
|
||||
<?php
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Database Class
|
||||
//============================================================================
|
||||
// Dependencies:
|
||||
//----------------------------------------------------------------------------
|
||||
// None
|
||||
//============================================================================
|
||||
// Modification History:
|
||||
//----------------------------------------------------------------------------
|
||||
// 2006-11-04: Created
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
class Database extends Error
|
||||
{
|
||||
## CONSTANT VARIABLES
|
||||
const DB_TYPES = 'mysql,mysqli'; // NO SPACES!
|
||||
## END CONSTANT VARIABLES
|
||||
|
||||
## PUBLIC VARIABLES
|
||||
## END PUBLIC VARIABLES
|
||||
|
||||
## PRIVATE VARIABLES
|
||||
private static $host;
|
||||
private static $port;
|
||||
private static $database;
|
||||
private static $username;
|
||||
private static $password;
|
||||
private static $type;
|
||||
private static $connection;
|
||||
private static $savedQueries;
|
||||
private static $savedResults;
|
||||
## END PRIVATE VARIABLES
|
||||
|
||||
## CONSTRUCTOR
|
||||
## END CONSTRUCTOR
|
||||
|
||||
## DECONSTRUCTOR
|
||||
## END DECONSTRUCTOR
|
||||
|
||||
## PUBLIC METHODS
|
||||
// Initialize the Variables
|
||||
// Does not return anything, but acts like a constructor for Static classes
|
||||
public static function Initialize($varType, $varHost, $varPort, $varDatabase, $varUsername, $varPassword)
|
||||
{
|
||||
Error::Initialize();
|
||||
|
||||
if (!self::ValidDatabaseTypes($varType))
|
||||
{
|
||||
Error::LogError("Database Type Invalid", "Database Type must be one of: " . self::DB_TYPES);
|
||||
}
|
||||
|
||||
self::$host = $varHost;
|
||||
self::$port = $varPort;
|
||||
self::$type = strtolower($varType);
|
||||
self::$database = $varDatabase;
|
||||
self::$password = $varPassword;
|
||||
self::$username = $varUsername;
|
||||
self::$savedQueries = array();
|
||||
self::$savedResults = array();
|
||||
self::$connection = self::ConnectToDatabase();
|
||||
|
||||
self::SelectTheDatabase();
|
||||
}
|
||||
|
||||
// DeInitialize the Variables
|
||||
// Does not return anything, but acts like a destructor for Static classes
|
||||
public static function DeInitialize()
|
||||
{
|
||||
// Remove Saved Queries
|
||||
for ($saved = 0; $saved < sizeof(self::$savedQueries); $saved++)
|
||||
{
|
||||
unset(self::$savedQueries[$saved]);
|
||||
}
|
||||
|
||||
// Remove Saved Results
|
||||
for ($saved = 0; $saved < sizeof(self::$savedResults); $saved++)
|
||||
{
|
||||
unset(self::$savedResults[$saved]);
|
||||
}
|
||||
|
||||
// Close the Database Connection
|
||||
switch (self::$type)
|
||||
{
|
||||
case "mysql":
|
||||
@mysql_close(self::$connection) or Error::LogError("MySQL Failed to Close", mysql_error(self::$connection));
|
||||
break;
|
||||
case "mysqli":
|
||||
@mysqli_close(self::$connection) or Error::LogError("MySQL Failed to Close", mysqli_error(self::$connection));
|
||||
break;
|
||||
}
|
||||
|
||||
// Destroy Variables
|
||||
self::$host = null;
|
||||
self::$port = null;
|
||||
self::$type = null;
|
||||
self::$database = null;
|
||||
self::$password = null;
|
||||
self::$username = null;
|
||||
self::$connection = null;
|
||||
self::$savedQueries = null;
|
||||
self::$savedResults = null;
|
||||
Error::DeInitialize();
|
||||
}
|
||||
|
||||
// Database Types
|
||||
// Returns an array of database types
|
||||
public static function DatabaseTypes()
|
||||
{
|
||||
return split(",", self::DB_TYPES);
|
||||
}
|
||||
|
||||
// Build Order By
|
||||
// Returns the SQL Syntax for ORDER BY
|
||||
public static function BuildOrderBy($varColumnName, $varDirection)
|
||||
{
|
||||
$orderby = "";
|
||||
if (self::$connection)
|
||||
{
|
||||
switch (self::$type)
|
||||
{
|
||||
case "mysql":
|
||||
case "mysqli":
|
||||
$orderby = "ORDER BY `{$varColumnName}` {$varDirection}";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $orderby;
|
||||
}
|
||||
|
||||
// Build Limit
|
||||
// Returns the SQL Syntax for LIMIT
|
||||
public static function BuildLimit($varStartingRow, $varNumberOfRows)
|
||||
{
|
||||
$limit = "";
|
||||
if (self::$connection)
|
||||
{
|
||||
switch (self::$type)
|
||||
{
|
||||
case "mysql":
|
||||
case "mysqli":
|
||||
$limit = "LIMIT {$varStartingRow}, {$varNumberOfRows}";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $limit;
|
||||
}
|
||||
|
||||
// Execute SQL Query
|
||||
// Returns the result of the query, which is typically a resource id
|
||||
public static function ExecuteQuery($sql, $name)
|
||||
{
|
||||
if (self::$connection)
|
||||
{
|
||||
if (strlen(trim($name)) != 0)
|
||||
{
|
||||
switch (self::$type)
|
||||
{
|
||||
case "mysql":
|
||||
if (!array_key_exists($name, self::$savedQueries))
|
||||
{
|
||||
self::$savedQueries[$name] = @mysql_query($sql, self::$connection) or Error::LogError("Query Failed", mysql_error(self::$connection));
|
||||
}
|
||||
break;
|
||||
case "mysqli":
|
||||
if (!array_key_exists($name, self::$savedQueries))
|
||||
{
|
||||
self::$savedQueries[$name] = @mysqli_query(self::$connection, $sql) or Error::LogError("Query Failed", mysqli_error(self::$connection));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return self::$savedQueries[$name];
|
||||
}
|
||||
else
|
||||
{
|
||||
Error::LogError("Execute Query Name Missing", "The name parameter was empty, please provide a name for the query.");
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// Fetch Results
|
||||
// Returns an array of the query results
|
||||
public static function FetchResults($name)
|
||||
{
|
||||
$results = array();
|
||||
if (self::$connection)
|
||||
{
|
||||
if (strlen(trim($name)) != 0 && (array_key_exists($name, self::$savedQueries) || array_key_exists($name, self::$savedResults)))
|
||||
{
|
||||
if (array_key_exists($name, self::$savedQueries))
|
||||
{
|
||||
switch (self::$type)
|
||||
{
|
||||
case "mysql":
|
||||
$row = 0;
|
||||
while ($currentResult = @mysql_fetch_assoc(self::$savedQueries[$name]))
|
||||
{
|
||||
$col = 0;
|
||||
foreach ($currentResult as $key => $value)
|
||||
{
|
||||
$results[$row][$col] = $value;
|
||||
$results[$row][$key] = $value;
|
||||
$col++;
|
||||
}
|
||||
|
||||
$row++;
|
||||
}
|
||||
break;
|
||||
case "mysqli":
|
||||
$row = 0;
|
||||
while ($currentResult = @mysqli_fetch_assoc(self::$savedQueries[$name]))
|
||||
{
|
||||
$col = 0;
|
||||
foreach ($currentResult as $key => $value)
|
||||
{
|
||||
$results[$row][$col] = $value;
|
||||
$results[$row][$key] = $value;
|
||||
$col++;
|
||||
}
|
||||
|
||||
$row++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
self::$savedResults[$name] = $results;
|
||||
}
|
||||
else
|
||||
{
|
||||
$results = self::$savedResults[$name];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strlen(trim($name)) == 0)
|
||||
{
|
||||
Error::LogError("Fetch Results Name Missing", "The name parameter was empty, the name is required so it knows which results to return.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Error::LogError("Fetch Results Name ('{$name}') Not Found", "The name provided did not have any query results associated with it.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
// Free SQL Query Results
|
||||
// Returns nothing
|
||||
public static function FreeResults($name)
|
||||
{
|
||||
if (self::$connection)
|
||||
{
|
||||
if (strlen(trim($name)) != 0 && array_key_exists($name, self::$savedQueries))
|
||||
{
|
||||
switch (self::$type)
|
||||
{
|
||||
case "mysql":
|
||||
@mysql_free_result(self::$savedQueries[$name]) or Error::LogError("Free Results Error", mysql_error(self::$connection));
|
||||
unset(self::$savedQueries[$name]);
|
||||
break;
|
||||
case "mysqli":
|
||||
@mysqli_free_result(self::$savedQueries[$name]) or Error::LogError("Free Results Error", mysqli_error(self::$connection));
|
||||
unset(self::$savedQueries[$name]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strlen(trim($name)) == 0)
|
||||
{
|
||||
Error::LogError("Free Results Name Missing", "The name parameter was empty, the name is required so it knows which results to free up from memory.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Error::LogWarning("Free Results Name ('{$name}') Not Found", "The name provided did not have any query results associated with it.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Remove Saved Results
|
||||
// Returns nothing
|
||||
public static function RemoveSavedResults($name)
|
||||
{
|
||||
if (strlen(trim($name)) != 0 && array_key_exists($name, self::$savedResults))
|
||||
{
|
||||
unset(self::$savedResults[$name]);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strlen(trim($name)) == 0)
|
||||
{
|
||||
Error::LogError("Remove Saved Result Name Missing", "The name parameter was empty, the name is required so it knows which query to remove.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Error::LogWarning("Remove Saved Result Name ('{$name}') Not Found", "The name provided was not a saved query.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Attempt Connect To Database
|
||||
// Returns true or false depending on if the connection failed or succeeded
|
||||
public static function AttemptConnectToDatabase($varType, $varHost, $varPort, $varDatabase, $varUsername, $varPassword)
|
||||
{
|
||||
self::$type = $varType;
|
||||
self::$host = $varHost;
|
||||
self::$port = $varPort;
|
||||
self::$database = $varDatabase;
|
||||
self::$username = $varUsername;
|
||||
self::$password = $varPassword;
|
||||
|
||||
Error::ClearErrors();
|
||||
self::$connection = self::ConnectToDatabase();
|
||||
|
||||
if (!Error::HasErrors())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// MySQL Version
|
||||
// Returns the mysql version number
|
||||
public static function MysqlVersion()
|
||||
{
|
||||
$version = "";
|
||||
if (self::$connection)
|
||||
{
|
||||
switch (self::$type)
|
||||
{
|
||||
case "mysql":
|
||||
$version = mysql_get_server_info(self::$connection);
|
||||
break;
|
||||
case "mysqli":
|
||||
$version = mysqli_get_server_info(self::$connection);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $version;
|
||||
}
|
||||
## END PUBLIC METHODS
|
||||
|
||||
## PRIVATE METHODS
|
||||
// Connect to Database
|
||||
// Returns the database connection resource
|
||||
private static function ConnectToDatabase()
|
||||
{
|
||||
$link = null;
|
||||
|
||||
switch (self::$type)
|
||||
{
|
||||
case "mysql":
|
||||
if (strlen(trim(self::$port)) != 0)
|
||||
{
|
||||
$link = mysql_connect(self::$host . ":" . self::$port, self::$username, self::$password) or Error::LogError("Database Error", mysql_error());
|
||||
}
|
||||
else
|
||||
{
|
||||
$link = mysql_connect(self::$host, self::$username, self::$password) or Error::LogError("Database Error", mysql_error());
|
||||
}
|
||||
break;
|
||||
case "mysqli":
|
||||
$link = mysqli_connect(self::$host, self::$username, self::$password, self::$database, self::$port) or Error::LogError("Database Error", mysqli_connect_error());
|
||||
break;
|
||||
}
|
||||
|
||||
return $link;
|
||||
}
|
||||
|
||||
// Select the Database
|
||||
// Returns nothing
|
||||
private static function SelectTheDatabase()
|
||||
{
|
||||
switch (self::$type)
|
||||
{
|
||||
case "mysql":
|
||||
@mysql_select_db(self::$database, self::$connection) or Error::LogError("Database Selection", mysql_error(self::$connection));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Valid Database Types
|
||||
// Returns true or false depending on if the database type is valid
|
||||
private static function ValidDatabaseTypes($varType)
|
||||
{
|
||||
$types = split(',', str_replace(" ", "", self::DB_TYPES));
|
||||
|
||||
return in_array($varType, $types);
|
||||
}
|
||||
## END PRIVATE METHODS
|
||||
|
||||
## PROTECTED METHODS
|
||||
## END PROTECTED METHODS
|
||||
}
|
||||
?>
|
Reference in New Issue
Block a user