Файл: includes/Database.class.php
Строк: 271
<?php
/**
* ====================================================================================
* PremiumMediaScript (c) KBRmedia
* ----------------------------------------------------------------------------------
* @copyright - This software is exclusively sold at CodeCanyon.net. If you have downloaded this
* from another site or received it from someone else than me, then you are engaged
* in illegal activities. You must delete this software immediately or buy a proper
* license from http://codecanyon.net/user/KBRmedia/portfolio?ref=KBRmedia.
*
* Thank you for your cooperation and don't hesitate to contact me if anything :)
* ====================================================================================
*
* WARNING: This file should not be modified in anyway or the app will not run!
* This file may not be shared or sold as is. For more info please contact us.
*
* @author KBRmedia (http://gempixel.com)
* @link http://gempixel.com
* @license http://gempixel.com/license
* @package Easy_Media_Script
* @subpackage Custom_PDO_API
*/
class Database{
/**
* System Variables
* @since 1.0
**/
protected $config=array(), $dbinfo, $db;
public $db_error, $query, $prefix;
public $rowCount, $rowCountAll;
public $num_queries=0, $show_query="",$object=TRUE;
/**
* Connect to Database
* @since 1.0
**/
public function __construct($config,$db){
$this->config=$config;
$this->dbinfo=$db;
$this->prefix=$db["prefix"];
try{
$this->db = new PDO("mysql:host=".$this->dbinfo["host"].";dbname=".$this->dbinfo["db"]."", $this->dbinfo["user"], $this->dbinfo["password"]);
$this->db->exec("set names utf8");
}catch (Exception $e){
$this->db_error = "Cannot connect to database: {$e->getMessage()}";
exit;
}
}
/**
* Output Errors
* @since 1.0
**/
public function __destruct(){
if(!empty($this->db_error) && $this->config["debug"]){
print_r("<h3>Database Error</h3><pre>{$this->db_error}</pre>");
if($this->config["debug"]=="2" && !empty($this->query)) {
print_r("<h3>Database Query</h3><pre>{$this->query}</pre>");
}
error_log("Database Error: {$this->db_error} occured at http://{$_SERVER["HTTP_HOST"]}{$_SERVER["REQUEST_URI"]}");
}
unset($this->config);
unset($this->db_error);
unset($this->query);
unset($this->dbinfo);
unset($this->db);
}
/**
* Use Original PDO API if needed
* @since 1.0
**/
public function pdo(){
return $this->db;
}
/**
* Get Last insert ID
* @author KBRmedia
* @since 1.0
*/
public function lastID(){
return $this->db->lastInsertId();
}
/**
* Get configuration
* @since 1.0
**/
public function get_config($table="setting"){
// Get Config
$data=$this->get($table);
foreach ($data as $key) {
$config[$key->config] = stripslashes($key->value);
}
return $config + $this->config;
}
/**
* Select function
* @since v1.0
*/
public function get($table,$where='',$sort='',$param=array()){
// Build Query
if(is_array($table)){
if(isset($table["custom"])){
$query = "SELECT {$table["custom"]} ";
$query_count = "SELECT {$table["custom"]} ";
}else{
$query="SELECT {$table["count"]} FROM ";
$query.="`{$this->dbinfo["prefix"]}{$table["table"]}`";
$table=$table["table"];
// For count
if(!empty($sort) && isset($sort["count"])){
$query_count = "SELECT id FROM `{$this->dbinfo["prefix"]}{$table["table"]}`";
}
}
}else{
$query="SELECT * FROM ";
$query.="`{$this->dbinfo["prefix"]}$table`";
if(!empty($sort) && isset($sort["count"])){
$query_count = "SELECT id FROM `{$this->dbinfo["prefix"]}{$table}`";
}
}
if(!empty($where)){
if(is_array($where)){
$query.=" WHERE ";
if(!empty($sort) && isset($sort["count"])){
$query_count.=" WHERE ";
}
$count=count($where);
$i=0;
foreach ($where as $key => $value) {
if($key == "sql"){
$query.= $value;
if(!empty($sort) && isset($sort["count"])){
$query_count .= $value;
}
}else{
$query.="`$key` = ".$this->quote($value,$param);
if(!empty($sort) && isset($sort["count"])){
$query_count.="`$key` = ".$this->quote($value,$param);
}
}
if(++$i != $count) {
$query.=" AND ";
if(!empty($sort) && isset($sort["count"])){
$query_count.=" AND ";
}
}
}
}else{
$query.=" WHERE ";
$query.= $where;
if(!empty($sort) && isset($sort["count"])){
$query_count.=" WHERE ";
$query_count.= $where;
}
}
}
if(!empty($sort) && isset($sort["count"])){
if(isset($sort["rows"])) {
$this->rowCount = $sort["rows"];
}else{
$result = $this->db->prepare($query_count);
$result->execute($param);
$this->rowCount=$result->rowCount();
}
}
if(!empty($sort)){
if(isset($sort["group"])){
$query.=" GROUP BY `{$sort["group"]}`";
}
if(isset($sort["group_custom"])) {
$query.=" GROUP BY {$sort["group_custom"]}";
}
if(isset($sort["order"])){
if($sort["order"]=="RAND()"){
$query.=" ORDER BY RAND()";
}else{
$query.=" ORDER BY `{$sort["order"]}`";
}
}
if(isset($sort["order"])){
if(isset($sort["asc"]) && $sort["asc"]==TRUE){
$query.=" ASC";
}else{
$query.=" DESC";
}
}
if(isset($sort["limit"])){
$query.=" LIMIT {$sort["limit"]}";
}
}
$result = $this->db->prepare($query);
$result->execute($param);
$this->rowCountAll=$result->rowCount();
if($this->error_message($result->errorInfo())) {
$this->query=strtr($query,$param);
$this->db_error=$this->error_message($result->errorInfo());
exit;
}
++$this->num_queries;
if((isset($sort["limit"]) && $sort["limit"]=="1")){
if($this->object){
return $result->fetchObject();
}else{
return $result->fetch(PDO::FETCH_ASSOC);
}
}else{
if($this->object){
return $result->fetchAll(PDO::FETCH_CLASS);
}else{
return $result->fetchAll();
}
return $data;
}
return FALSE;
}
/**
* Run Queries
* @since v1.0
*/
public function run($query,$param=array(),$fetch=FALSE,$array=array()){
$data="";
$result = $this->db->prepare($query);
if($result->execute($param) && !$fetch){
return TRUE;
}
if($this->error_message($result->errorInfo())) {
$this->query=strtr($query,$param);
$this->db_error=$this->error_message($result->errorInfo());
exit;
}
++$this->num_queries;
// Return Response
if(empty($array)){
if($this->object){
return $result->fetchAll(PDO::FETCH_CLASS);
}else{
return $result->fetchAll();
}
}else {
$data=$result->fetch(PDO::FETCH_ASSOC);
if($array) return array($data);
return $data;
}
}
/**
* Insert to database
* @since v1.0
*/
public function insert($table,$parameters=array()){
$param="";
$val="";
$insert= $this->ph($parameters);
//Build Query
$query="INSERT INTO {$this->dbinfo["prefix"]}$table";
if(is_array($insert)){
$count=count($insert);
$i=0;
foreach ($insert as $key => $value) {
if($parameters[$value]=="NOW()"){
$val.= "NOW()";
unset($parameters[$value]);
}else{
$val.=$this->quote($value,$parameters);
}
$param.="`$key`";
if(++$i != $count) {
$param.=",";
$val.=",";
}
}
$query.=" ($param) VALUES ($val)";
}
$result = $this->db->prepare($query);
$result->execute($parameters);
if($this->error_message($result->errorInfo())) {
$this->query=strtr($query,$parameters);
$this->db_error=$this->error_message($result->errorInfo());
exit;
}
++$this->num_queries;
return TRUE;
}
/**
* Update Query
* @since 1.0
**/
public function update($table,$field,$where,$param=array()){
if(empty($field)){
$field=$this->ph($param);
}
//Build Query
$query="UPDATE {$this->dbinfo["prefix"]}$table SET ";
if(is_array($field)){
$count=count($field);
$i=0;
foreach ($field as $key => $value) {
if($value=="NOW()"){
$query.="`$key`=$value";
}else{
$query.="`$key`=".$this->quote($value,$param);
}
if(++$i != $count) {
$query.=",";
}
}
}else{
$query.=$field;
}
if(is_array($where)){
$count=count($where);
$i=0;
$query.=" WHERE ";
foreach ($where as $key => $value) {
$query.="`$key`=".$this->quote($value,$param);
if(++$i != $count) {
$query.=" AND ";
}
}
}else{
$query.=" WHERE $where";
}
$result = $this->db->prepare($query);
$result->execute($param);
if($this->error_message($result->errorInfo())) {
$this->query=strtr($query,$param);
$this->db_error=$this->error_message($result->errorInfo());
exit;
}
++$this->num_queries;
return TRUE;
}
/**
* Delete Function
* @since v1.0
*/
public function delete($table,$where,$param=array()){
//Build Query
$query="DELETE FROM {$this->dbinfo["prefix"]}$table";
if(is_array($where)){
$count=count($where);
$i=0;
$query.=" WHERE ";
foreach ($where as $key => $value) {
$query.="`$key`=".$this->quote($value,$param);
if(++$i != $count) {
$query.=" AND ";
}
}
}else{
$query.=" WHERE ";
$query.=$where;
}
$result = $this->db->prepare($query);
$result->execute($param);
if($this->error_message($result->errorInfo())) {
$this->query=strtr($query,$param);
$this->db_error=$this->error_message($result->errorInfo());
exit;
}
++$this->num_queries;
return TRUE;
}
/**
* Search Database
* @since 1.0
**/
public function search($table,$where,$sort=array(),$param=array()){
// Build Query
if(is_array($table)){
if(isset($table["custom"])){
$query = "SELECT {$table["custom"]} ";
}else{
$query="SELECT {$table["count"]} FROM ";
$query.="`{$this->dbinfo["prefix"]}{$table["table"]}`";
$table=$table["table"];
}
}else{
$query="SELECT * FROM ";
$query.="`{$this->dbinfo["prefix"]}$table`";
}
$query.=" WHERE ";
if(is_array($where)){
$i=0;
$count=count($where);
foreach ($where as $key => $value) {
if(is_array($value)){
$query.="`{$value[0]}`='{$value[1]}' AND (";
++$i;
}else{
if($i==0) $query.="(";
$query.="`$key` LIKE $value";
if(++$i != $count) {
$query.=" OR ";
}else{
$query.=")";
}
}
}
}else{
$query.=$where;
}
$result = $this->db->prepare($query);
$result->execute($param);
$this->rowCount=$result->rowCount();
if(!empty($sort)){
if(isset($sort["group"])){
$query.=" GROUP BY `{$sort["group"]}`";
}
if(isset($sort["group_custom"])) {
$query.=" GROUP BY {$sort["group_custom"]}";
}
if(isset($sort["order"])){
if($sort["order"]=="RAND()"){
$query.=" ORDER BY RAND()";
}else{
$query.=" ORDER BY `{$sort["order"]}`";
}
}
if(isset($sort["order"])){
if(isset($sort["asc"])){
$query.=" ASC";
}else{
$query.=" DESC";
}
}
if(isset($sort["limit"])){
$query.=" LIMIT {$sort["limit"]}";
}
}
$result = $this->db->prepare($query);
$result->execute($param);
if($this->error_message($result->errorInfo())) {
$this->query=strtr($query,$param);
$this->db_error=$this->error_message($result->errorInfo());
exit;
}
if($result->rowCount()){
// Return Response
if($this->object){
return $result->fetchAll(PDO::FETCH_CLASS);
}else{
return $result->fetchAll();
}
return $data;
}
++$this->num_queries;
return array();
}
/**
* Row Count
* @since v1.0
*/
public function count($table,$where='',$sum='',$format=FALSE,$division=FALSE) {
if(!empty($where)) $where="WHERE $where";
if($sum) {
$query = "SELECT SUM($sum) FROM {$this->dbinfo["prefix"]}$table $where";
$result = $this->db->prepare($query);
$result->execute();
if($this->error_message($result->errorInfo())) {
$this->query=$query;
$this->db_error=$this->error_message($result->errorInfo());
exit;
}
while($row = $result->fetch(PDO::FETCH_ASSOC)){
$count=$row['SUM('.$sum.')'];
if(!$count) $count="0";
}
}else{
$query = "SELECT * FROM {$this->dbinfo["prefix"]}$table $where";
$result = $this->db->prepare($query);
$result->execute();
if($this->error_message($result->errorInfo())) {
$this->query=$query;
$this->db_error=$this->error_message($result->errorInfo());
exit;
}
$count=$result->rowCount();
}
++$this->num_queries;
if($format) return Main::formatnumber($count,2);
return $count;
}
/**
* Generate Placeholders
* @since 1.0
**/
private function ph(array $a){
$b=array();
foreach ($a as $key => $value) {
$b[str_replace(":", "", $key)]="$key";
}
return $b;
}
/**
* Check if there is an error
* @since 1.0
**/
private function error_message($error){
if(!empty($error[2])){
return $error[2];
}
return FALSE;
}
/**
* Check if quotes are needed
* @since 1.0
**/
private function quote($string,$param=''){
if(empty($param)){
return "'$string'";
}
return $string;
}
}