discourse-legacysite-perl/site/retailers/rating/classes/database.class.php
2024-06-17 22:42:14 +10:00

406 lines
13 KiB
PHP

<?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
}
?>