โดยปกติ การเรียกใช้งาน 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