โดยปกติการเขียนคิวรี่ insert ใน model และต้องการข้อมูล id ของตารางที่(id ที่มีการกำหนด identity)ที่เราได้ insert ไป เราจะใช้ฟังก์ชัน insert_id() ในการดึงข้อมูล id นั้น ๆ ดังนี้
Table A id มีการกำหนด identityและมีการเขียน trigger ให้ insert ข้อมูลลงตาราง B และ C
ข้อมูลในตาราง A
ข้อมูลในตาราง B
ข้อมูลในตาราง C
เมื่อเราใช้ function insert () ดังนี้
function insert (){
$sql = "INSERT INTO A (a,b,c)
VALUES(?,?,?)";
$this->db->query($sql,array($this->a, $this->b, $this->c));
$tmpid = $this->db->insert_id();
return $tmpid;
}
ค่า $tmpid ที่ต้องการคือ id ถัดไปของตาราง A คือ 3 แต่ผลที่ได้ คือ 2
เนื่องจากฟังก์ชัน insert_id() จะไม่รู้ว่าเรา insert กี่ตาราง จะมองเป็นการ insert ครั้งเดียว ดังนั้นจึงดึงค่า id ของตารางสุดท้ายที่ได้ insert ข้อมูลลงไป(ตาราง C) ผู้เขียนจึงนำเสนอแนวทางในการแก้ไข โดยการนำ IDENT_CURRENT( 'table_name' ) มาช่วยในการระบุตารางที่เราต้องการดึงข้อมูล id ที่มีการกำหนด identity ดังนี้
function insert (){
$sql = "INSERT INTO A (a,b,c)
VALUES(?,?,?)";
$this->db->query($sql,array($this->a, $this->b, $this->c));
$query = $this->db->query("SELECT IDENT_CURRENT ('A') AS ID")
$row = $query->row();
$tmpid = $row->ID;
return $tmpid;
}