Я склонен использовать смесь двух ваших примеров. Я почти уверен, что такие вещи, как обрезка, не изменят фактические данные поста, поэтому вы можете воспользоваться ими только в том случае, если вы пройдете через систему проверки для получения данных. Я на самом деле никогда больше не получаю доступ к POST напрямую с помощью CI.
Кроме того, я бы побеспокоился в вашем втором примере о том, чтобы просто вставить POST в мою модель. Что произойдет, если кто-то умный добавит «фамилию» к отправленным данным поста, и ваш столбец БД будет иметь то же имя? Даже если вы не ожидали обработки этих данных, теперь поступают непроверенные данные. Вот почему я использую часть вашего первого примера и вручную вытаскиваю элементы, которые хочу сохранить в массив.
Так что я бы порекомендовал гибрид.
Обычно мой код выглядит примерно так:
$fields['email'] = "trim|required|valid_email|min_length[4]|xss_clean";
...
...
$this->validation->set_rules($fields);
if ($this->validation->run())
{
$account = new array();
$account['id'] = $accountId; //wherever you get the Id from
$account['email'] = $this->validation->email;
$this->account_model->save($account);
$this->session->set_flashdata('message', 'Done!');
redirect('account/settings');
} else {
...
}