<?php
/**
* MySQL Wrapper Class
*
* @author Roy Toledo <toledoroy at hotmail dot com>
* @package DB
* @license GNU General Public License
* @version 3
* @date 2011-04-12
* @uses Constatns DBHost, DBUser, DBPassword, DBDefaultDatabase
* @todo Use Exeptions
*/
class dbWrapper
{
protected $host = DBHost;
protected $user = DBUser;
protected $pass = DBPassword;
protected $dbname = DBDefaultDatabase;
protected $link;
private $result;
private $sql;
private $rollback = false;
public $debug = false;
function __construct()
{
$this->connect();
mysql_set_charset('utf8',$this->link);
$this->set_db($this->dbname);
return $this->link;
}
private function connect()
{
$this->link = mysql_connect($this->host,$this->user,$this->pass,true) or die ("DB Connection Failed:<br />".$this->ReportError());
}
public function set_db($value)
{
if (mysql_select_db($value,$this->link)){
return true;
}else{
$this->ReportError();
}
}
public function getResult()
{
return $this->result;
}
/**
* Check If Results Recieved From Last Query
* @return false, or Number Of Records int
*/
public function hasResults()
{
if ($this->result && mysql_num_rows($this->result) > 0)
return mysql_num_rows($this->result);
else
return false;
}
/**
* Handle DB Errors
*/
private function ReportError($message = '')
{
$errNum = mysql_errno($this->link);
$errText = mysql_error($this->link);
//Handle Specific Errors:
//if ($errNum == 2006) exit("Database Not Available, Please Try Again Later");
//Prepare The Error Message:
$ERR_message = $_SERVER['PHP_SELF'].sprintf("DB Error,\n (%s): %s<p>", $errNum, $errText);
if ($message != ''){
$ERR_message .= $message;
}
//Take Action
if ($this->debug) {
echo($ERR_message);
}else{
error_log($ERR_message,0);
}
//throw new Exception($ERR_message);
}
/**
* Run SQL Query
* @return Mysql Result Handler
* @param $value Query String
*/
public function query($value)
{
$this->sql = $value;
if (!$this->result = mysql_query($value,$this->link)) {
$this->rollback = true ;
$this->ReportError();
return false;
}else{
return $this->result;
}
}
/**
* Run SQL One Row Query
* @return Array
* @param $sql Query String
*/
public function queryRow($sql) //Returns One Row as an Array
{
$this->sql = $sql;
$result = $this->query($sql);
if ($result)
$row = mysql_fetch_array($result,MYSQL_ASSOC);
else
$row = false;
return $row;
}
/**
* Select All Table Rows
* @param string $table_name Table Name
* @param string $where WHERE Statement
*/
public function selectTable($table_name,$where = 1)
{
$query = "SELECT * FROM $table_name WHERE $where;";
return $this->query($query);
}
/**
* Get Enum Colum's Values By Column's Name
* @param string $table
* @param string $field
*/
public function getEnumValues($table,$field)
{
if ($result = $this->query("SHOW COLUMNS FROM $table LIKE '$field' ",$this->link)) {
while ($table = mysql_fetch_array($this->result)){
$options= explode(",", preg_replace("/^enum\(|'|\)/i", "", $table[Type]));
}
return $options;
}else{ $this->ReportError(); return false; }
}
/**
* Get Query Row Result
* @return Array
*/
public function getRow()
{
if ($this->result)
$row = mysql_fetch_array($this->result,MYSQL_ASSOC);
else
$row = false;
return $row;
}
/**
* Get Last Insert ID
* @return Last Insert PKey
*/
public function getInsertId()
{
return mysql_insert_id($this->link);
}
/***** MySQL Transactions *****/
/**
* Begin Transaction
*/
public function begin()
{
$this->rollback = false;
$this->query("BEGIN");
if ($this->debug) echo "<br /><font color='blue'>Mysql begin</font><br />";
}
/**
* Commit Transaction (If Successful)
*/
public function commit()
{
if ($this->rollback == false) {
$this->query("COMMIT");
if ($this->debug) echo "<br /><font color='blue'>Mysql commit</font><br />";
return true;
}else{
$this->rollback();
if ($this->debug) echo "<br /><font color='red'>Mysql rollback</font><br />";
return false;
}
}
/**
* Rollback Transaction
*/
public function rollback()
{
$this->query("ROLLBACK");
$this->rollback = false;
if ($this->debug) echo "<br /><font color='red'>Mysql Rollback</font><br />";
}
/**
* Move Pointer To Resorce Begining
*/
public function reset()
{
@mysql_data_seek($this->result,0); //Move Pointer To Resorce Begining
}
/**
* Get Results In a 3D Array
* @return 3d Array
*/
public function get3DArray()
{
while ($row = mysql_fetch_array($this->result)){
$result3d[] = $row;
}
return $result3d;
}
/**
* Prepare Values For Query
* @param $value string Single Value To Be Processed
* @return $value string Processed Value
*/
private function prepare_sql_data_string($value)
{
/*
if(get_magic_quotes_runtime()) $string = stripslashes($string);
return @mysql_real_escape_string($string,$this->link_id);
*/
if ($value != ""){
$exceptions = array('null','now()');
if (!in_array(strtolower($value),$exceptions)){
//$value = mysql_escape_string($value);
$value = str_replace("'","`",$value);
$value = "'".$value."'";
}
return $value;
}else return "''";
}
/**
* Update a Table
* @param array $valuesArray Update Values as name=>value
* @param string $table Table Name
* @param string $pKey Table Private Key
* @return bool
*/
public function update(array $valuesArray,$table,$pKey='id') // Recives colom name as array key and row value as array value (updates single table via PKey)
{
// Build Update Query
foreach( $valuesArray as $key => $value) {
$value = trim($value);
if ($key == $pKey) {
$where = "$pKey = ".$this->prepare_sql_data_string($value);
}elseif ($value != ""){
$sql_update[] = "`$key` = ".$this->prepare_sql_data_string($value);
}
}
$set = implode(",",$sql_update);
$query = "UPDATE $table SET $set WHERE $where";
$this->sql = $query;
if ($this->debug) echo "SQL: ".$query;
// Run Query
if ($this->query($query))
return true;
else {
$this->ReportError();
return false;
}
}
/**
* Insert Values To Table
* @param array $valuesArray Insert Values as name=>value Array
* @param string $table Table Name
* @return bool
*/
public function insert(array $valuesArray,$table) // Recives colom name as array key and row value as array value
{
$i=0;
// Build Insert Query
foreach($valuesArray as $key => $value) {
$value = trim($value);
if ($value !== ""){
$sql_keys[$i] = $key;
$sql_values[$i] = $this->prepare_sql_data_string($value);
$i++;
}
}
$q_keys = implode(",",$sql_keys);
$q_values = implode(",",$sql_values);
$query = "INSERT INTO $table ($q_keys) VALUES ($q_values)";
if ($this->debug) echo "SQL: ".$query;
// Run query
if($this->query($query)){
return true;
}else{
$this->ReportError();
return false;
}
}
/**
* Replace Values in Table
* @param array $valuesArray, Update Values as name=>value Array
* @param string $table Table Name
* @return bool
*/
public function replace($valuesArray,$table) // Recives colom name as array key and row value as array value
{
$i=0;
// Build Insert Query
foreach($valuesArray as $key => $value) {
$value = trim($value);
if ($value !== ""){
$sql_keys[$i] = $key;
$sql_values[$i] = $this->prepare_sql_data_string($value);
$i++;
}
}
$q_keys = implode(",",$sql_keys);
$q_values = implode(",",$sql_values);
$query = "REPLACE INTO $table ($q_keys) VALUES ($q_values)";
if ($this->debug) echo "SQL: ".$query;
// Run query
return $this->query($query);
}
/**
* Copy Complete Table
* @param unknown_type $tableName
*/
public function backupTable($tableName)
{
$newName = $tableName."_".date("dmy");;
$sql = "CREATE TABLE `$newName` SELECT * FROM `$tableName` ";
$this->query($sql);
}
}
|