"; $script = ''; $details ='[+]სრულად
'; if (self::LOG_ERRORS) self::_logError($errNo,$errDesc,$errDet); if (self::DEBUG) $error = "{$script} შეცდომა: #{$errNo} - {$errDesc}
$details"; else $error = "შეცდომა: #{$errNo} - {$errDesc}"; exit(str_replace("",$error,$data)); } // Debug SQL private static function _debugSQL($sqlStr) { echo "".date("d.m.Y / H:i:s")." - {$sqlStr}
"; } // შეცდომის ჟურნალში გატარება private static function _logError($errNo,$errDesc,$errDet) { $html = "MySQL Error Log
თარიღი/დროკოდიშეცდომადეტალურად
"; if (file_exists(self::LOG_FILE)) $log = file_get_contents(self::LOG_FILE); else $log = $html; $newRecord = "".date("d.m.Y / H:i:s")."$errNo$errDesc$errDet"; $log = str_replace("",$newRecord."",$log); file_put_contents(self::LOG_FILE,$log); } // SQL სტრინგის "გაწმენდა" private static function _clearSQL ($sql) { $cleanSql = ""; if (get_magic_quotes_gpc()) $cleanSql = stripslashes($sql); $cleanSql = @mysql_real_escape_string($cleanSql); return $cleanSql; } //----------------------------------------------------------------------------------------------------- //კლასის იმპლიმენტაცია //----------------------------------------------------------------------------------------------------- // კონსტრუქტორი public function __construct($connectionString) { if (PHP_VERSION < self::MIN_PHP_VERSION) self::_raiseError(1,"PHP ვერსია ნაკლებია 5-ზე","კლასის კორექტულად მუშაობისათვის აუცილებელია PHP-ს ვერსია იყოს >= ".self::MIN_PHP_VERSION."-ზე. მიმდინარე ვერსიაა ".PHP_VERSION); $params = split(";",@$connectionString); $this->address = substr(@$params[0],strpos(@$params[0],"=")+1); $this->userName = substr(@$params[1],strpos(@$params[1],"=")+1); $this->password = substr(@$params[2],strpos(@$params[2],"=")+1); $this->database = substr(@$params[3],strpos(@$params[3],"=")+1); } // კავშირის კონტროლი //----------------------------------------------------------------------------------------------------- // სერვერთან კავშირის გახსნა public function Open() { try { $this->dblink = @mysql_connect($this->address,$this->userName,$this->password); if (!is_resource(@$this->dblink)) throw new Exception(mysql_error(),mysql_errno()); if (!@mysql_select_db($this->database,$this->dblink)) throw new Exception(mysql_error(),mysql_errno()); $this->ExecuteQuery("SET NAMES utf8"); $this->ExecuteQuery("SET CHARACTER SET utf8"); } catch (Exception $x) { self::_raiseError($x->getCode(),"შეუძლებელია მონაცემთა ბაზის სერვერთან დაკავშირება",$x->getMessage()); } } // სერვერთან კავშირის გაწყვეტა public function Close() { try { if (@$this->dblink) { if (!@mysql_close($this->dblink)) throw new Exception(mysql_error(),mysql_errno()); } } catch (Exception $x) { self::_raiseError($x->getCode(),"შეუძლებელია მონაცემთა ბაზის სერვერთან კავშირის კორექტულად გაწყვეტა",$x->getMessage()); } } // SQL მოთხოვნების შესრულება //----------------------------------------------------------------------------------------------------- // SQL მოთხოვნის შესრულება რეზულტატის გარეშე public function ExecuteNonQuery($query) { try { $query = trim($query); if ($query=="") throw new Exception("შეუძლებელია ცარიელი SQL მოთხოვნის შესრულება",1); if (self::DEBUG_SQL) self::_debugSQL($query); if (!@mysql_query($query,$this->dblink)) throw new Exception(mysql_error(),mysql_errno()); } catch (Exception $x) { if ($this->transId!=null) $this->RollBackTransaction(); self::_raiseError($x->getCode(),"შეუძლებელია SQL მოთხოვნის შესრულება",$x->getMessage()); } } // SQL მოთხოვნის შესრულება სკალარული რეზულტატით public function ExecuteScalar($query) { try { $query = trim($query); if ($query=="") throw new Exception("შეუძლებელია ცარიელი SQL მოთხოვნის შესრულება",1); if (self::DEBUG_SQL) self::_debugSQL($query); $result=@mysql_query($query,$this->dblink); if (!@$result) throw new Exception(mysql_error(),mysql_errno()); return mysql_result($result,0,0); } catch (Exception $x) { self::_raiseError($x->getCode(),"შეუძლებელია SQL მოთხოვნის შესრულება",$x->getMessage()); } } // SQL მოთხოვნის შესრულება რეზულტატით public function ExecuteQuery($query) { try { $query = trim($query); if ($query=="") throw new Exception("შეუძლებელია ცარიელი SQL მოთხოვნის შესრულება",1); if (self::DEBUG_SQL) self::_debugSQL($query); $res = @mysql_query($query,$this->dblink); if (!$res) throw new Exception(mysql_error(),mysql_errno()); return $res; } catch (Exception $x) { self::_raiseError($x->getCode(),"შეუძლებელია SQL მოთხოვნის შესრულება",$x->getMessage()); } } // SQL Min/Max/Count ფუნქციები //----------------------------------------------------------------------------------------------------- // Max მნიშვნელობის ამოღება მითითებული ცხრილის მითითებული სვეტიდან public function SelectMax($table,$column,$where="") { try { $table = trim($table); $column = trim($column); $where=trim($where); if ($table=="") throw new Exception("მიუთითეთ ცხრილის სახელი",1); if ($column=="") throw new Exception("მიუთითეთ სვეტის სახელი",1); if ($where!="") $where = "WHERE ".self::_clearSQL($where); $sqlstr = sprintf("SELECT MAX(%s) FROM %s %s" ,self::_clearSQL($column), self::_clearSQL($table),$where); return $this->ExecuteScalar($sqlstr); } catch (Exception $x) { self::_raiseError($x->getCode(),"შეუძლებელია SQL მოთხოვნის შესრულება",$x->getMessage()); } } // Min მნიშვნელობის ამოღება მითითებული ცხრილის მითითებული სვეტიდან public function SelectMin($table,$column) { try { $table = trim($table); $column = trim($column); if ($table=="") throw new Exception("მიუთითეთ ცხრილის სახელი",1); if ($column=="") throw new Exception("მიუთითეთ სვეტის სახელი",1); $sqlstr = sprintf("SELECT MIN(%s) FROM %s" ,self::_clearSQL($column), self::_clearSQL($table)); return $this->ExecuteScalar($sqlstr); } catch (Exception $x) { self::_raiseError($x->getCode(),"შეუძლებელია SQL მოთხოვნის შესრულება",$x->getMessage()); } } // ჩანაწერების რაოდენობის ამოღება რომელიც აკმაყოფილებს კონკრეტულ პირობას public function SelectCount($table,$column,$filter="") { try { $table = trim($table); $column = trim($column); $filter = trim($filter); if ($table=="") throw new Exception("მიუთითეთ ცხრილის სახელი",1); if ($column=="") throw new Exception("მიუთითეთ სვეტის სახელი",1); if ($filter!="") $filter="WHERE ".self::_clearSQL($filter); $sqlstr = sprintf("SELECT COUNT(%s) FROM %s %s" ,self::_clearSQL($column), self::_clearSQL($table),$filter); return $this->ExecuteScalar($sqlstr); } catch (Exception $x) { self::_raiseError($x->getCode(),"შეუძლებელია SQL მოთხოვნის შესრულება",$x->getMessage()); } } // Select/Insert/Update/Delete ვრაპერები //----------------------------------------------------------------------------------------------------- // მონაცემების ამორჩევა public function Select($table,$fields,$where="",$group="",$order="",$limit="") { try { if (is_array(@$fields)) $fields = implode(",",fields); $table = trim($table); $where = trim($where); $group = trim($group); $order = trim($order); $limit = trim($limit); if ($table=="") throw new Exception("მიუთითეთ ცხრილის სახელი",1); if ($fields=="") throw new Exception("მიუთითეთ ამოსარჩევი სვეტები",1); if ($where!="") $where="WHERE $where"; if ($group!="") $group="GROUP BY $group"; if ($order!="") $order="ORDER BY $order"; if ($limit!="") $limit="LIMIT $limit"; $sqlstr = sprintf("SELECT %s FROM %s %s %s %s %s" ,self::_clearSQL($fields), self::_clearSQL($table),self::_clearSQL($where),self::_clearSQL($group),self::_clearSQL($order),self::_clearSQL($limit)); $res = $this->ExecuteQuery($sqlstr); if (!@is_resource($res)) throw new Exception("რეზულტატის იდენტიფიკატორი არაკორექტულია, რეზულტატის მასივის გენერაცია შეუძლებელია",1); $result = array(); while ($row=mysql_fetch_assoc($res)) { $result[] =$row; } return $result; } catch (Exception $x) { self::_raiseError($x->getCode(),"შეუძლებელია SQL მოთხოვნის შესრულება",$x->getMessage()); } } // მონაცემების ჩაწერა public function Insert($table,$fields,$values) { try { $table = trim($table); if ($table=="") throw new Exception("მიუთითეთ ცხრილის სახელი",1); if (gettype(@$fields)!=gettype(@$values)) throw new Exception("ველების სახელები და ჩასაწერი მონაცემები არ არის გადმოცემული ერთნაირი ფორმატით",1); else if (!is_array(@$fields) && !is_array(@$values)) { $fields=split(",",$fields); $values=split(",",$values); } if (count($fields)<>count($values)) throw new Exception("ველებისა და ჩასაწერი მონაცემებს რაოდენობა ერთმანეთს არ ემთხვევა: ველები - ".count($fields).", მონაცემები - ".count($values),1); for($i=0;$iExecuteNonQuery($sqlstr); return mysql_affected_rows($this->dblink); } catch (Exception $x) { self::_raiseError($x->getCode(),"შეუძლებელია SQL მოთხოვნის შესრულება",$x->getMessage()); } } // მონაცემების განახლება public function Update($table,$fields,$values,$where="") { try { $table = trim($table); $where = trim($where); if ($table=="") throw new Exception("მიუთითეთ ცხრილის სახელი",1); if (gettype(@$fields)!=gettype(@$values)) throw new Exception("ველების სახელები და განსაახლებელი მონაცემები არ არის გადმოცემული ერთნაირი ფორმატით",1); else if (!is_array(@$fields) && !is_array(@$values)) { $fields=split(",",$fields); $values=split(",",$values); } if (count($fields)<>count($values)) throw new Exception("ველებისა და ჩასაწერი მონაცემებს რაოდენობა ერთმანეთს არ ემთხვევა: ველები - ".count($fields).", მონაცემები - ".count($values),1); $str=""; for($i=0;$iExecuteNonQuery($sqlstr); return mysql_affected_rows($this->dblink); } catch (Exception $x) { self::_raiseError($x->getCode(),"შეუძლებელია SQL მოთხოვნის შესრულება",$x->getMessage()); } } // მონაცემების წაშლა public function Delete($table,$where="") { try { $table = trim($table); $where = trim($where); if ($table=="") throw new Exception("მიუთითეთ ცხრილის სახელი",1); if ($where!="") $where="WHERE $where"; $sqlstr = sprintf("DELETE FROM %s %s",$table,$where); $this->ExecuteNonQuery($sqlstr); return mysql_affected_rows($this->dblink); } catch (Exception $x) { self::_raiseError($x->getCode(),"შეუძლებელია SQL მოთხოვნის შესრულება",$x->getMessage()); } } // ტრანზაკციების მართვა //----------------------------------------------------------------------------------------------------- // ტრანზაკციის დაწყება public function OpenTransaction() { try { if ($this->transId!=null) throw new Exceptio("თქვენ უკვე გაქვთ გახსნილი ტრანზაკცია, გთხოვთ დახუროთ არსებული ტრანზაკცია",1); $this->transId = md5(time()); $this->ExecuteQuery("START TRANSACTION"); } catch (Exception $x) { self::_raiseError($x->getCode(),"შეუძლებელია SQL მოთხოვნის შესრულება",$x->getMessage()); } } // ტრანზაკციის გაუქმება public function RollBackTransaction() { $this->ExecuteQuery("ROLLBACK;"); $this->transQuery=""; $this->transId = null; } // ტრანზაკციის დამოწმება public function CommitTransaction() { try { $this->ExecuteQuery("COMMIT;"); $this->transQuery=""; $this->transId = null; } catch (Exception $x) { self::_raiseError($x->getCode(),"შეუძლებელია SQL მოთხოვნის შესრულება",$x->getMessage()); } } //----------------------------------------------------------------------------------------------------- } ?>