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