Được rồi, tôi đã quản lý để tìm ra một giải pháp "sạch", sử dụng phép nối, bộ của codeigniter, v.v. Vì vậy, điều thú vị là bạn sẽ có tất cả lợi ích của CI khi sử dụng $ this-> db-> join (), $ this-> db-> join (), v.v. như thoát và thêm dấu ngoặc kép.
Vì vậy, trước tiên hãy làm tất cả những thứ CI của bạn:
$this->db->join(..) // Set all your JOINs
$this->db->set(..) // Set your SET data
$this->db->where(..) // Set all your WHEREs
Sau đó, bạn có thể tạo truy vấn bằng cách sử dụng các phần tử truy vấn đã sẵn sàng, được làm sạch và đã thoát của Active Record:
// JOIN
$sql = "UPDATE $this->baseTable ";
$sql .= implode(' ', $this->db->ar_join);
// SET
$sql .= ' SET';
$setArray = array();
foreach ($this->db->ar_set as $column=>$newValue)
array_push($setArray, " $column = $newValue");
$sql .= implode(',', $setArray);
// WHERE
$sql .= ' WHERE '.implode(' ', $this->db->ar_where);
$this->db->query($sql);
Nếu ai đó có giải pháp tốt hơn, tôi sẽ sẵn lòng chấp nhận và sử dụng nó thay thế