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
