SHARE
TWEET

Untitled

a guest Oct 21st, 2019 108 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. class MySQL {
  3.    
  4.     private $link = null;
  5.     private $info = array(
  6.         'last_query' => null,
  7.         'num_rows' => null,
  8.         'insert_id' => null
  9.     );
  10.     private $connection_info = array();
  11.    
  12.     private $where;
  13.     private $limit;
  14.     private $join;
  15.     private $order;
  16.    
  17.     function __construct($host, $user, $pass, $db){
  18.         $this->connection_info = array('host' => $host, 'user' => $user, 'pass' => $pass, 'db' => $db);
  19.     }
  20.    
  21.     function __destruct(){
  22.         if($this->link instanceof mysqli_result) mysqli_close($this->link);
  23.     }
  24.    
  25.     /**
  26.     * Setter method
  27.     */
  28.    
  29.     private function set($field, $value){
  30.         $this->info[$field] = $value;
  31.     }
  32.    
  33.     /**
  34.     * Getter methods
  35.     */
  36.    
  37.     public function last_query(){
  38.         return $this->info['last_query'];
  39.     }
  40.    
  41.     public function num_rows(){
  42.         return $this->info['num_rows'];
  43.     }
  44.    
  45.     public function insert_id(){
  46.         return $this->info['insert_id'];
  47.     }
  48.    
  49.     /**
  50.     * Create or return a connection to the MySQL server.
  51.     */
  52.    
  53.     private function connection(){
  54.         if(!is_resource($this->link) || empty($this->link)){
  55.             if(($link = mysqli_connect($this->connection_info['host'], $this->connection_info['user'], $this->connection_info['pass'])) && mysqli_select_db($link, $this->connection_info['db'])){
  56.                 $this->link = $link;
  57.                 mysqli_set_charset($link, 'utf8');
  58.             }else{
  59.                 throw new Exception('Could not connect to MySQL database.');
  60.             }
  61.         }
  62.         return $this->link;
  63.     }
  64.    
  65.     /**
  66.     * MySQL Where methods
  67.     */
  68.    
  69.     private function __where($info, $type = 'AND'){
  70.         $link =& self::connection();
  71.         $where = $this->where;
  72.         foreach($info as $row => $value){
  73.             if(empty($where)){
  74.                 $where = sprintf("WHERE `%s`='%s'", implode("`.`",explode(".",$row)), mysqli_real_escape_string($link, $value));
  75.             }else{
  76.                 $where .= sprintf(" %s `%s`='%s'", $type, $row, mysqli_real_escape_string($link, $value));
  77.             }
  78.         }
  79.         $this->where = $where;
  80.     }
  81.    
  82.     private function __join($table, $condition, $type = 'INNER') {
  83.         $join = $this->join;
  84.         $join .= " {$type} JOIN {$table} ON ";
  85.         if(is_array($condition)) {
  86.             foreach ($condition as $key => $cond) {
  87.                 if($key > 0) {
  88.                     $join .= " AND ";
  89.                 }
  90.                 $join .= $cond;
  91.             }
  92.         } else {
  93.             $join .= $condition;
  94.         }
  95.         $this->join = $join;
  96.     }
  97.  
  98.     public function join($table, $condition) {
  99.         self::__join($table, $condition);
  100.         return $this;
  101.     }
  102.  
  103.     public function leftJoin($table, $condition) {
  104.         self::__join($table, $condition, 'LEFT');
  105.         return $this;
  106.     }
  107.  
  108.     public function rightJoin($table, $condition) {
  109.         self::__join($table, $condition, 'RIGHT');
  110.         return $this;
  111.     }
  112.  
  113.     public function crossJoin($table, $condition) {
  114.         self::__join($table, $condition, 'CROSS');
  115.         return $this;
  116.     }
  117.    
  118.     public function where($field, $equal = null){
  119.         if(is_array($field)){
  120.             self::__where($field);
  121.         }else{
  122.             self::__where(array($field => $equal));
  123.         }
  124.         return $this;
  125.     }
  126.    
  127.     public function and_where($field, $equal = null){
  128.         return $this->where($field, $equal);
  129.     }
  130.    
  131.     public function or_where($field, $equal = null){
  132.         if(is_array($field)){
  133.             self::__where($field, 'OR');
  134.         }else{
  135.             self::__where(array($field => $equal), 'OR');
  136.         }
  137.         return $this;
  138.     }
  139.    
  140.     /**
  141.     * MySQL limit method
  142.     */
  143.    
  144.     public function limit($limit){
  145.         $this->limit = 'LIMIT '.$limit;
  146.         return $this;
  147.     }
  148.    
  149.     /**
  150.     * MySQL Order By method
  151.     */
  152.    
  153.     public function order_by($by, $order_type = 'DESC'){
  154.         $order = $this->order;
  155.         if(is_array($by)){
  156.             foreach($by as $field => $type){
  157.                 if(is_int($field) && !preg_match('/(DESC|desc|ASC|asc)/', $type)){
  158.                     $field = $type;
  159.                     $type = $order_type;
  160.                 }
  161.                 if(empty($order)){
  162.                     $order = sprintf("ORDER BY `%s` %s", $field, $type);
  163.                 }else{
  164.                     $order .= sprintf(", `%s` %s", $field, $type);
  165.                 }
  166.             }
  167.         }else{
  168.             if(empty($order)){
  169.                 $order = sprintf("ORDER BY `%s` %s", $by, $order_type);
  170.             }else{
  171.                 $order .= sprintf(", `%s` %s", $by, $order_type);
  172.             }
  173.         }
  174.         $this->order = $order;
  175.         return $this;
  176.     }
  177.    
  178.     /**
  179.     * MySQL query helper
  180.     */
  181.    
  182.     private function extra(){
  183.         $extra = '';
  184.         if(!empty($this->join)) $extra .= ' '.$this->join;
  185.         if(!empty($this->where)) $extra .= ' '.$this->where;
  186.         if(!empty($this->order)) $extra .= ' '.$this->order;
  187.         if(!empty($this->limit)) $extra .= ' '.$this->limit;
  188.         // cleanup
  189.         $this->join = null;
  190.         $this->where = null;
  191.         $this->order = null;
  192.         $this->limit = null;
  193.         return $extra;
  194.     }
  195.    
  196.     /**
  197.     * MySQL Query methods
  198.     */
  199.    
  200.     public function query($qry, $return = false){
  201.         $link =& self::connection();
  202.         self::set('last_query', $qry);
  203.         $result = mysqli_query($link, $qry);
  204.         if($result instanceof mysqli_result){
  205.             self::set('num_rows', mysqli_num_rows($result));
  206.         }
  207.         if($return){
  208.             if(preg_match('/LIMIT 1/', $qry)){
  209.                 $data = mysqli_fetch_assoc($result);
  210.                 mysqli_free_result($result);
  211.                 return $data;
  212.             }else{
  213.                 $data = array();
  214.                 while($row = mysqli_fetch_assoc($result)){
  215.                     $data[] = $row;
  216.                 }
  217.                 mysqli_free_result($result);
  218.                 return $data;
  219.             }
  220.         }
  221.         return true;
  222.     }
  223.    
  224.     public function get($table, $select = '*'){
  225.         $link =& self::connection();
  226.         if(is_array($select)){
  227.             $cols = '';
  228.             foreach($select as $col){
  229.                 $cols .= "{$col},";
  230.             }
  231.             $select = substr($cols, 0, -1);
  232.         }
  233.         $sql = sprintf("SELECT %s FROM %s%s", $select, $table, self::extra());
  234.         self::set('last_query', $sql);
  235.  
  236.         if(!($result = mysqli_query($link,$sql))){
  237.             throw new Exception('Error executing MySQL query: '.$sql.'. MySQL error '.mysqli_errno().': '.mysqli_error());
  238.             $data = false;
  239.         }elseif($result instanceof mysqli_result){
  240.             $num_rows = mysqli_num_rows($result);
  241.             self::set('num_rows', $num_rows);
  242.             if($num_rows === 0){
  243.                 $data = false;
  244.             }elseif(preg_match('/LIMIT 1/', $sql)){
  245.                 $data = mysqli_fetch_assoc($result);
  246.             }else{
  247.                 $data = array();
  248.                 while($row = mysqli_fetch_assoc($result)){
  249.                     $data[] = $row;
  250.                 }
  251.             }
  252.         }else{
  253.             $data = false;
  254.         }
  255.         mysqli_free_result($result);
  256.         return $data;
  257.     }
  258.  
  259.     public function get_single($table, $select = '*') {
  260.       $results=$this->get($table, $select);
  261.       if(count($results)>0) return $results[0];
  262.       return $results;
  263.     }
  264.    
  265.     public function insert($table, $data){
  266.         $link =& self::connection();
  267.         $fields = '';
  268.         $values = '';
  269.         foreach($data as $col => $value){
  270.             $fields .= sprintf("`%s`,", $col);
  271.             $values .= sprintf("'%s',", mysqli_real_escape_string($link, $value));
  272.         }
  273.         $fields = substr($fields, 0, -1);
  274.         $values = substr($values, 0, -1);
  275.         $sql = sprintf("INSERT INTO %s (%s) VALUES (%s)", $table, $fields, $values);
  276.         self::set('last_query', $sql);
  277.         if(!mysqli_query($link,$sql)){
  278.             throw new Exception('Error executing MySQL query: '.$sql.'. MySQL error '.mysqli_errno().': '.mysqli_error());
  279.         }else{
  280.             self::set('insert_id', mysqli_insert_id());
  281.             return true;
  282.         }
  283.     }
  284.    
  285.     public function update($table, $info){
  286.         if(empty($this->where)){
  287.             throw new Exception("Where is not set. Can't update whole table.");
  288.         }else{
  289.             $link =& self::connection();
  290.             $update = '';
  291.             foreach($info as $col => $value){
  292.                 $update .= sprintf("`%s`='%s', ", $col, mysqli_real_escape_string($link, $value));
  293.             }
  294.             $update = substr($update, 0, -2);
  295.             $sql = sprintf("UPDATE %s SET %s%s", $table, $update, self::extra());
  296.             self::set('last_query', $sql);
  297.             if(!mysqli_query($link,$sql)){
  298.                 throw new Exception('Error executing MySQL query: '.$sql.'. MySQL error '.mysqli_errno().': '.mysqli_error());
  299.             }else{
  300.                 return true;
  301.             }
  302.         }
  303.     }
  304.    
  305.     public function delete($table){
  306.         if(empty($this->where)){
  307.             throw new Exception("Where is not set. Can't delete whole table.");
  308.         }else{
  309.             $link =& self::connection();
  310.             $sql = sprintf("DELETE FROM %s%s", $table, self::extra());
  311.             self::set('last_query', $sql);
  312.             if(!mysqli_query($link,$sql)){
  313.                 throw new Exception('Error executing MySQL query: '.$sql.'. MySQL error '.mysqli_errno().': '.mysqli_error());
  314.             }else{
  315.                 return true;
  316.             }
  317.         }
  318.     }
  319.    
  320. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top