Location: PHPKode > scripts > IdealMySQL Database Class for MySQL > idealmysql-database-class-for-mysql/IdealMySQL.class.php
<?php
// You can change this to show no errors as we
// are collecting and showing them ourself.
error_reporting(0);
/**
 * IdealMySQL, MySQL class
 * 
 * This is a MySQL class for Idealws. This will
 * be used in all projects that use a MySQL database.
 * @author Ray Cuzzart II <hide@address.com>
 * @version 1.1
 * @package Idealws
 * @copyright 2007 Idealws - All Right's Reserved
 * @example test.php
 */

/**
 * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, 
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
 * IN NO EVENT SHALL RAY CUZZART II, IDEAL WEB SERVICES OR ANY OTHER 
 * CONTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 * DEALINGS IN THE SOFTWARE.
 */

/**
 * IdealMySQL class. 
 * 
 * This is the class file used to connect and do
 * common things with a MySQL database.
 * @package Idealws
 * @subpackage classes
 */
class IdealMySQL {
	/**
	 * @access protected
	 * @var string
	 * @desc Set to 1 to send errors to admins email address.
	 */
	protected $adminSendEmail = 0;
	/**
	 * @access protected
	 * @var string
	 * @desc Set to admins email address for error notification.
	 */
	protected $adminEmail = "hide@address.com";
	/**
	 * @access protected
	 * @var string
	 * @desc Reply to address. Usually a email address you do not except emails to.
	 */
	protected $adminFromEmail = "hide@address.com";
	/**
	 * @access protected
	 * @var string
	 * @desc Subject line for admins error email.
	 */
	protected $adminSubject = "There has been a error with name of your program.";

 // *********************************************************************************** //
 // ***************** DO NOT CHANGE ANYTHING BELOW THIS LINE ************************** //
 // ********************* UNLESS YOU KNOW WHAT YOUR DOING ***************************** //
 // *********************************************************************************** //
	/**
	 * @access protected
	 * @var integer|string
	 */
	protected $db;
	/**
	 * @access protected
	 * @var integer|string
	 */
	protected $dbHost;
	/**
	 * @access protected
	 * @var integer|string
	 */
	protected $dbUser;
	/**
	 * @access protected
	 * @var integer|string
	 */
	protected $dbPass;
	/**
	 * @access public
	 * @var integer|string
	 */
	public $dbConnect;
	/**
	 * @access public
	 * @var string
	 */
	public $dbResults;
	/**
	 * @access public
	 * @var string
	 */
	public $dbSelected;
	/**
	 * @access public
	 * @var integer
	 */
	public $dbAffectedRows;
	/**
	 * @access public
	 * @var integer
	 */
	public $dbNumberRows;
	/**
	 * @access protected
	 * @var integer|string
	 */
	protected $errorCode;
	/**
	 * @access private
	 * @var integer|string
	 */
	private $errorText;
	/**
	 * Constructor sets up {$db $dbHost $dbUser $dbPass}
	 */
	function __construct($vardb, $vardbhost, $vardbuser, $vardbpass) {
		// Lets make sure the database information provided does not
		// have any illegal characters in it.
		if($this->checkvar($vardb))$this->db = $vardb;
		if($this->checkvar($vardbhost))$this->dbHost = $vardbhost;
		if($this->checkvar($vardbuser))$this->dbUser = $vardbuser;
		if($this->checkvar($vardbpass))$this->dbPass = $vardbpass;
		// Lets try and make a database connection
		$this->MySQLConnect();
	}
	/**
	 * Function to connect to database
	 *
	 * This function is used to connect to the database of
	 * choice. This function is publicly accesable
	 * @return integer
	 */
	protected function MySQLConnect() {
		// We need to try and connect to the database from here.
		try {
			$conn = mysql_connect($this->dbHost,$this->dbUser,$this->dbPass);
			if($conn) {
				$this->dbConnect = $conn;
				// Lets select the database we are going to be using
				try {
					if(mysql_select_db($this->db)) {
						$this->dbSelected = 1;
					}else{
						throw new Exception($this->errorCode = 6);
					}
				}
				catch(Exception $e) {
				$line = $e->getLine()-3;  // Get line number where exception was thrown and subtract to actual line of error
				$errfile = $e->getFile(); // Get the file name and path of the error				
				echo $this->getMessageMap();
					// We are going yo send the email from
				// here so the user does not have to wait.
				if($this->adminSendEmail) {
					$this->emailAdmin($this->errorText, $line, $errfile);
				}
					exit;
				}
			}else{
				throw new Exception($this->errorCode = 2);
			}
		}
		catch(Exception $e) {
			$line = $e->getLine()-4;    // Get line number where exception was thrown and subtract to actual line of error
			$errfile = $e->getFile();	// Get the file name and path of the error		
			echo $this->getMessageMap();
			// We are going yo send the email from
			// here so the user does not have to wait.
			if($this->adminSendEmail) {
				$this->emailAdmin($this->errorText, $line, $errfile);
			}
			exit;
		}	
	}
	
	/**
	 * Function to do database queries
	 *
	 * This funstion is to do actual database queries. It will return
	 * the affected rows if it is a INSERT, DELETE, UPDATE, REPLACE, DROP
	 * if it is a SELECT, SHOW, DESCRIBE or EXPLAIN it will return the
	 * resource.
	 * 
	 * We have not tested the input for the query. You should check 
	 * what is being passed for illegal characters prior to sending
	 * the query here.
	 * @return integer
	 * @return resource|string
	 */
	public function MySQLQuery($query) {
		try {
			// Lets get the query information we are going to check
			// to see if it is a INSERT, DELETE, UPDATE, REPLACE or DROP 
			if (eregi("(^INSERT|DELETE|UPDATE|REPLACE|DROP)", $query)) {
				try {
					// Let's do the query
					$this->dbResults = mysql_query($query, $this->dbConnect);
					$this->dbAffectedRows = mysql_affected_rows($this->dbConnect);
					// Let's check to see how many rows are affected
					if ($this->dbResults) {
						// Return the affected rows
						return $this->dbAffectedRows;
					}else{
						// If there is a problem we need to let someone know
						throw new Exception($this->errorCode = 5);
					}				
				}
				// Now we catch the error and process it
				catch(Exception $e) {
					$line = $e->getLine()-8;    // Get line number where exception was thrown and subtract to actual line of error
					$errfile = $e->getFile();	// Get the file name and path of the error			
					echo $this->getMessageMap();
					// We are going yo send the email from
					// here so the user does not have to wait.
					if($this->adminSendEmail) {
						$this->emailAdmin($this->errorText, $line, $errfile);
					}
					exit;
				}
			// Lets get the query information we are going to check
			// to see if it is a SELECT, SHOW, DESCRIBE or EXPLAIN
			}elseif (eregi("(^SELECT|SHOW|DESCRIBE|EXPLAIN)", $query)) {
				try {
					// Let's do the query
					$this->dbResults = mysql_query($query, $this->dbConnect);
					$this->dbNumberRows = mysql_num_rows($this->dbResults);
					// Let's check to see how many rows are affected
					if ($this->dbNumberRows) {
						// Return the results
						return $this->dbResults;
					}else{
						// If there is a problem we need to let someone know
						throw new Exception($this->errorCode = 5);
					}				
				}
				// Now we catch the error and process it
				catch(Exception $e) {
					$line = $e->getLine()-8;    // Get line number where exception was thrown and subtract to actual line of error
					$errfile = $e->getFile();	// Get the file name and path of the error			
					echo $this->getMessageMap();
					// We are going yo send the email from
					// here so the user does not have to wait.
					if($this->adminSendEmail) {
						$this->emailAdmin($this->errorText, $line, $errfile);
					}
					exit;
				}
			}else{
				// If there is a problem we need to let someone know
				throw new Exception($this->errorCode = 5);
			}
		}
		// Now we catch the error and process it
		catch(Exception $e) {
			$line = $e->getLine()-5;    // Get line number where exception was thrown and subtract to actual line of error
			$errfile = $e->getFile();	// Get the file name and path of the error			
			echo $this->getMessageMap();
			// We are going yo send the email from
			// here so the user does not have to wait.
			if($this->adminSendEmail) {
				$this->emailAdmin($this->errorText, $line, $errfile);
			}
			exit;
		}
	}
	
	/**
	 * Function to test variables
	 *
	 * This function is used to test if variables have illegal characters.
	 * the only characters we want in the string ar a-z A-Z _- and 0-9 anything
	 * else will be considered illegal and throw a error message.
	 * @param string $var string to test
	 * @return integer
	 */
	public function checkvar($var) {
		try {
		 	if(eregi('^[a-zA-Z0-9_-]+$', $var)) {
				return TRUE;
			}else{
			 	throw new Exception($this->errorCode = 1);
				// return FALSE;
			}
		}
		catch (Exception $e) {
			$line = $e->getLine()-3;    // Get line number where exception was thrown and subtract to actual line of error
			$errfile = $e->getFile();	// Get the file name and path of the error	
			echo $this->getMessageMap();
			// We are going yo send the email from
			// here so the user does not have to wait.
			if($this->adminSendEmail) {
				$this->emailAdmin($this->errorText, $line, $errfile);
			}
			exit;
		}
	}
	
	/**
	 * Function to get error codes
	 *
	 * This function is used to get the errors from the flat
	 * file we have setup for our error system.
	 * @return string
	 */
	protected function getMessageMap() {
		$errors = file("errors.txt");
		foreach($errors as $error) {
			list($key,$value) = explode(",",$error,2);
			$errorArray[$key] = $value;
		}
		// Assign just the error to a error variable
		// so we can use it in the emails.
		$this->errorText = $errorArray[$this->errorCode];
		// Return the error so we can print it out for the
		// user.
		return "<br><center><div class=\"errortitle\">Application Error!</div><div class=\"error\">".$errorArray[$this->errorCode]."</div></center>";
	}
	
	/**
	 * Function to email admin if there is a error.
	 *
	 * This function is used to email errors as they occur to the
	 * admin of the site.
	 * @return string
	 */
	protected function emailAdmin($errorMessage, $errorLine, $errorFile) {		
		// Lets's try and send a email when there is a error.
		try {
			// Who is the email coming from?
			$headers = "From: $this->adminFromEmail" . "\r\n";	
			// Here is the message. You can change this to bee however you want.		
			$message = "Application Error!\n\nThe following error occured: ".$errorMessage."\nLine Number: ".$errorLine."\nFile: ".$errorFile;
			// Actually send the email out.
			$mailsent = mail($this->adminEmail, $this->adminSubject, $message, $headers);
			// If the email gets sent out then we are good.
			if ($mailsent) {
				return TRUE;
			}else{
				// If the email fails we need to produce another error.
				throw new Exception($this->errorCode = 4);
			}
		}
		// Let's show the error now that we have produced it.
		catch(Exception $e) {
			echo $this->getMessageMap();
			exit;
		}
	}
}
?>
Return current item: IdealMySQL Database Class for MySQL