Query CONCAT untuk CI 2.x…

codeigniter-logo

Artikel ini hanya untuk pengguna CI 2.x…, karena repot belum migrasi ke versi 3.

Singkat cerita ada kasus untuk query select seperti ini:

CONCAT(
 IF(a.gelardpn!='', CONCAT( a.gelardpn, '. '), ''),
 a.nama,
 IF(a.gelarblk!='', CONCAT(', ', a.gelarblk), '')
 ) AS nama_gelar

setelah dirender ama driver CI, tiba2 keluarnya:

CONCAT( IF(a.gelardpn!='', CONCAT( a.gelardpn, prefix_'. '), ''), a.nama, IF(a.gelarblk!='', CONCAT(', ', a.gelarblk), '') ) AS nama_gelar

otomatis script error, Incorrect parameters in the call to native function ‘CONCAT’ padahal protect identifier udah diset FALSE. Pada akhirnya buka class databasenya, system/database/DB_driver.php liat fungsi _protect_identifiers, ternyata querynya diexplode berdasarkan . kemudian ditambahin prefix baru kemudian diimplode lagi.

Namun pada bagian sebelumnya dituliskan:

 // This is basically a bug fix for queries that use MAX, MIN, etc.
 // If a parenthesis is found we know that we do not need to
 // escape the data or add a prefix. There's probably a more graceful
 // way to deal with this, but I'm not thinking of it -- Rick
 if (strpos($item, '(') !== FALSE)
 {
   return $item.$alias;
 }

ya akhirnya diubah querynya jadi seperti ini, dan berhasil.

CONCAT(
 IF(a.gelardpn!='', CONCAT( a.gelardpn, ('. ')), ''),
 a.nama,
 IF(a.gelarblk!='', CONCAT(', ', a.gelarblk), '')
 ) AS nama_gelar

Semoga bermanfaat

About Ilham Hernowo S

Kelahiran Ungaran 1985. Beristri 1 beranak 2, thats enough.
This entry was posted in Database, PHP, Programing. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

* Kode Akses Komentar:

* Tuliskan kode akses komentar diatas: