Thursday, December 11, 2014

CodeIgniter : Call Stored Procedure ที่มี Out Parameter นะจ๊ะ

โดยปกติ การเรียกใช้งาน MySQL Stored Procedure ใน CI นั้นไม่ค่อยสะดวกเท่าไหร่ เพราว่า CI อนุญาตให้ Query ข้อมูลได้ทีละครั้ง ซึ่งถ้าเรา Query หลาย ๆ ครั้งจะต้องเป็นการเริ่มต้นใหม่โดยที่ไม่มีส่วนใดของ Query ก่อนหน้ามาเกี่ยวข้องด้วย

แต่สำหรับ Stored Procedure ที่มี Out Parameter นั้นจะต้องทำการ Query ถึง 2 ครั้งโดยครั้งที่ 2 นั้นจะต้อง SELECT ค่าของตัวแปร OUT เพิ่มเข้ามาอีก ดังนั้นเราจึงต้องทำการแก้ไขไฟล์ /system/database/drivers/mysqli/mysqli_driver.php จากบรรทัดที่ 176

function _execute($sql)
{
 $sql = $this->_prep_query($sql);
 $result = @mysqli_query($this->conn_id, $sql);
 return $result;
}
แก้ไขเป็น
function _execute($sql)
{
 $sql = $this->_prep_query($sql);
 @mysqli_multi_query($this->conn_id, $sql);
 $result = @mysqli_store_result($this->conn_id);
 if (@mysqli_more_results($this->conn_id)) {
 @mysqli_next_result($this->conn_id);
}
return $result;
}

สิ่งสำคัญคือ อย่าลืมไป config database ให้ใช้ Driver จาก mysql เป็นmysqli ด้วยนะ เพียงเท่านี้ท่านก็จะสามารถ call Procedure ได้อย่างสบายใจเฉิบ ^^

No comments:

Post a Comment