Azwar

Berbagi cerita dan informasi

Tag Archives: codeigniter tutorial

Tutorial CodeIgniter – Query untuk searching data

Ada sedikit masalah pada CodeIgniter versi 1.7.3 berkenaan dengan Active Record.

Masalah yang saya maksudkan adalah, ketika saya menggunakan fungsi like() pada active record. Fungsi tersebut hanya mau menghasilkan pencarian dengan 1 kata saja. Contoh saya mencari kata ‘aku’ pada kalimat ‘Siapa aku ini’. Dengan pencarian 1 kata tersebut, CodeIgniter (CI) versi 1.7.3 mau menghasilkan query. Namun ketika saya mencari lebih dari 1 kata, misalkan ‘aku ini’ maka resultset nya 0 alias tidak ketemu.

Hmmm…. saya berburu info di internet, tapi tak saya temukan info berguna, mungkin juga saya-nya yang kurang teliti dalam berburu info. Hehe… Yasudah tidak apa-apa, perjuangan tetap berlanjut.

Kemudian, akhirnya saya pake cara jantan, alias cara manual. Biasa lahh… The Power of Simplicity. 😀 Nah itu, kalo sesuatu tidak bisa dihandle oleh hal yang sedikit kompleks, maka cara simpel bisa menjadi obat. Karena simpel itu lah kita bisa memvariasikannya supaya jadi lebih fleksibel. Ups malah ngobrol. Ayo kita selesaikan tutorialnya.

Ya, akhirnya saya menggunkana cara manual. Dengan menggunakan fungsi query($string_query). Yah.. tak masalah, sama-sama query bukan?

Jika menggunakan Active record bentuknya seperti ini:


        	$this->db->like($word, $type);
        	$this->db->or_like($word, $type, 'before');
        	$this->db->or_like($word, $type, 'after');
        	$query = $this->db->get('article'); 

dan dengan menggunakn query manual menjadi seperti ini:

			$query = $this->db->query("
				SELECT *
				FROM `article`
				WHERE `$type` LIKE '%$word%' OR `$type` LIKE '%$word' OR `$type` LIKE '$word%'
			"); 

namun query ini sangat rentan terhadap injeksi,
jadi kita ubah dengan query berparameter, dalam java namanya prepared statement.
Jadinya seperti ini:

        	$sql = "
				SELECT *
				FROM `article`
				WHERE `$type` LIKE '%$word%' OR `$type` LIKE '%$word' OR `$type` LIKE '$word%'
			"; 
        	$query = $this->db->query($sql, array($type, $word, $type, $word, $type, $word,)); 

Perhatikan, parameternya harus urut (urutannya sesuai) dengan yang ada di syntax query.

Semoga bisa menjadi tambahan referensi.
Terimakasih.