การใช้ฟังก์ชัน IDENT_CURRENT() เพื่อระบุตารางที่เราต้องการดึงข้อมูล id ที่มีการกำหนด identity
8 สิงหาคม พ.ศ. 2559 กิตินันท์ หุ่นดี สำนักคอมพิวเตอร์ เปิดอ่านแล้ว 0 ครั้ง

         โดยปกติการเขียนคิวรี่ 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;

}