406 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			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
 | 
						|
  }
 | 
						|
?>
 |