PHP – Database’in Tamamında Arama Yapmak

Full-text search özelliğine sahip olmayan bir MySQL engine’da tüm alanlarda arama yapılması gerekmişti.

Ben de yazmış olduğum bir kodu örnek olması için koydum.

Açıklamaları kodun içine comment olarak ekledim.

class DBSearch {
     
    function __construct($keyword){
        $this->keyword = $keyword;
    }
     
    function DBConnect(){
        $this->db = new PDO("mysql:dbname=test;host=localhost", "root", "");
        return $this;
    }
     
    // Veritabanındaki tüm tablolar döndürüldü.
    function getTables(){
        $mtch = $this->db->query('SHOW TABLES');
        $this->tables = $mtch->fetchAll();
        return $this;
    }
     
    // İstenen tablodaki sütunlar (kolonlar) döndürüldü.
    function getColumns($table){
        $mtch = $this->db->query('SHOW COLUMNS FROM ' . $table);
        return $mtch->fetchAll();
    }
     
    function matches($searchSQL){
        $src = $this->db->query($searchSQL);
            if($src->rowCount() > 0){
                $view  = null;
                $view .= "------------------------------------------\n";
                $view .= "Tablo: " . $this->tbls[0] . "\n";
                $view .= "Sorgu: " . $searchSQL;
                $view .= "\n------------------------------------------\n";
                echo $view;            
            }            
        }
     
    // Tablolarda arama işlemi burada gerçekleşiyor.    
    function initalize(){
        foreach($this->tables as $this->tbls){
             
            $columns = $this->getColumns($this->tbls[0]);
             
            $searchSQL = sprintf("SELECT * FROM %s WHERE %s LIKE '%%%s%%'", $this->tbls[0], $columns[0][0], $this->keyword);
 
            unset($columns[0][0]);
 
            foreach($columns as $clmns){
                $searchSQL .= sprintf(" OR %s LIKE '%%%s%%'",$clmns['Field'], $this->keyword);
            }
             
            // Sorgu hazırlandıktan sonra işletilmek üzere matches() gönderiliyor.
            $this->matches($searchSQL); 
        }
    }
}
 
$search = new DBSearch('deneme');
$search->DBConnect()
       ->getTables();
$search->initalize();

Sprintf fonksiyonunu kullanımı için daha önce yazdığım yazıya buraya tıklayıp gözatabilirsiniz.

 
43 Kudos
Don't move

Yorum Yap


Not - Bunları KullanabilirsinizHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>