Membuat CRUD class dengan Mysqli di PHP Part 1

Apa itu MySqli?


Mysqli merupakan sebuah class di PHP untuk mengeksekusi berbagai fungsi database MySql. MySqli tersedia untuk PHP 5 ke atas. Mengunakan mysqli untuk eksesekusi database sangat disarankan jika menggunakan Mysql versi 4.1.3 ke atas.

Sebagaimana class dan Object Oriented Programming, MySqli memiliki constructor, object, dan juga method yang bisa dijalankan seperti class lainya.

 

Apa keuntungan menggunakan mysqli dibanding dengan mysql?

  1. Beberapa fungsi pada mysql sudah ditinggalkan untuk PHP versi 5.5 ke atas yang digantikan  dengan fungsi-fungsi Mysqli.
  2. Mysqli bisa dijalankan dengan pemprograman prosedural atau pun OOP.
  3. Mendukung statement awal dan juga multi statement.
  4. Dukungan traksaksi.
  5. Kemampuan debug yang meningkat.
  6. Dukungan server yang tertanam.
Untuk mengaktifkan mysqli sangatlah mudah. Pertama tentunya update dulu versi PHP ke PHP 5 ke atas. Edit file php.ini dan tambahkan

extension = mysqli.dll

atau kalau sudah ada baris tersebut dan terdapat tanda ";" di depannya, tinggal hapus tanda tersebut kemudian simpan file php.ini yang sudah diedit. Jangan lupa untuk merestart servernya.

Bagiamana cara menggunakannya?

Seperti disebutkan sebelumnya bahwa mysqli bisa digunakan dengan cara OOP. Code berikut merupakan contoh class database untuk CRUD (Create, Read,Update, Delete) yang menggunakan class mysqli sebagai parent class

class db extends mysqli{    
    private $host  = HOST;
    private $user = DB_USER;
    private $pass = DB_PASS;
    private $db = DB_NAME;
    
    public function __construct() {
        parent::__construct($this->host,  $this->user,  $this->pass,  $this->db);
        if (mysqli_connect_error()) {
            die('Connect Error (' . mysqli_connect_errno() . ') '
                    . mysqli_connect_error());
        }
    }
    public function get_data($table,$orderBy='',$orderType='desc',$limit =''){
        $dat = array();
        if($table !=''){            
            $q = $this->create_query($table,$orderBy,$orderType,$limit);
            if($q){
                while ($data = $q->fetch_array()){
                    $dat[] = $data;
                }
                $q->free();
            }                             
        }
        return $dat;
    }
    public function create_query($table,$orderBy='',$orderType='desc',$limit =''){
         if($table !=''){
            $sql = "SELECT * FROM ".$table;
            if(!empty($orderBy)){
                $sql .= " ORDER BY ".$orderBy." ".$orderType;
            }          
            if (!empty ($limit)) {
                $sql .= " limit ".$limit;
            }
            $q = $this->query($sql);
         }
         else{
             $q = false;
         }
         return $q;
    }
    public function total_row($table,$orderBy='',$orderType='desc',$limit =''){
     $num = 0;
     if($table !=''){            
            $q = $this->create_query($table,$orderBy,$orderType,$limit);
            if($q){
                $num = $q->num_rows;
                $q->free();
            }                             
        }
        return $num;
    }

    public function insert($table,$data){
        if(is_array($data)){
            foreach ($data as $key =>$val){
                $vals[] = "'".$this->real_escape_string($val)."'";
                $keys[] = $key;
            }
        }
        $field = implode(', ',$keys);
        $value = implode(', ',$vals);        
        $sql = "INSERT INTO ".$table." (".$field.") VALUES (".$value.")";
        $query = $this->query($sql);
        if($query){
            $id = $this->insert_id;           
        }
        else {
            $id = 0;
        }       
        return $id;
    }
    public function delete($table,$where = array(),$type=''){
        $sql = "DELETE FROM ".$table;
        if(!empty($where)){
            $sql .= $this->_where($where,$type);
        }
        $q = $this->query($sql);
        $row = $this->affected_rows;
        return $row;
    }
    public function update($table,$data,$where=array(),$type=''){
        $sql = "UPDATE ".$table;
        if(is_array($data)){
            foreach ($data as $key =>$val){
                $vals = "'".addcslashes($val)."'";                
                $param[] = $key." = ".$vals;
                }
        }
        $param = implode(', ', $param);
        $sql .= " SET ".$param;
        if(!empty($where)){
            $sql .= $this->_where($where,$type);            
        }       
        $q = $this->query($sql);
        $row =  $this->affected_rows;
        return $row;
    }
    public function get_data_by($table,$where=array(),$type=''){
        $sql = "SELECT * FROM ".$table;
        if(!empty($where)){
           $sql .= $this->_where($where, $type);
        }        
        $q = $this->query($sql);
        $dat = array();
        if($q){
            while($data = $q->fetch_array()){
                $dat[] = $data;
             }
        }        
        return $dat;
    }
    function _has_operator($str)
 {
            $str = trim($str);
            if ( ! preg_match("/(\s|<|>|!|=|is null|is not null)/i", $str))
            {
                    return FALSE;
            }
            return TRUE;
 }
   function _where($where,$type=''){
       $sql = " WHERE ";
       if(is_array($where)){           
           foreach ($where as $k=>$v){
               if(!is_integer($v)){
                   $v = "'".addslashes($v)."'";
               }
               if(!$this->_has_operator($k)){
                   $k .= "=";
               }
               $val[]=$k.$v;               
           }
           if(count($val)>1){
               if(empty($type)){
                   $type = "AND";
               }
               $val = implode(" ".$type." ", $val);
           }
           else {
               $val = implode("", $val);
           }
       }
       $sql .= $val;
       return $sql;
   }   
}
Jika terdapat bug pada code diatas silahkan laporkan melalui komentar di post ini, atau kirim email ke unang.pejuang@gmail.com

Tidak ada komentar:

Posting Komentar