У меня есть запрос вставки (стиль активной записи), используемый для вставки полей формы в таблицу MySQL. Я хочу получить последний автоматически увеличенный идентификатор для операции вставки в качестве возвращаемого значения моего запроса, но у меня есть некоторые проблемы с ним.
Внутри контроллера:
function add_post(){
$post_data = array(
'id' => '',
'user_id' => '11330',
'content' => $this->input->post('poster_textarea'),
'date_time' => date("Y-m-d H:i:s"),
'status' => '1'
);
return $this->blog_model->add_post($post_data);
}
И внутри модели:
function add_post($post_data){
$this->db->trans_start();
$this->db->insert('posts',$post_data);
$this->db->trans_complete();
return $this->db->insert_id();
}
Я ничего не получаю как возврат add_post в модели
mysql
codeigniter
Афганский дев
источник
источник
db->insert_id()
возвращаетсяfalse
послеdb->trans_complete()
. Убедитесь, что вы получите своиinsert_id()
, прежде чем завершить транзакцию.Ответы:
Попробуй это
В случае нескольких вставок вы можете использовать
источник
Транзакция здесь не нужна, этого должно быть достаточно:
источник
источник
Из документации :
Поэтому вы можете использовать что-то вроде этого:
источник
потому что вы инициировали транзакцию через вставку данных, поэтому, первая проверка транзакции завершена или нет. после запуска транзакции она должна быть зафиксирована или откатана в соответствии со статусом транзакции;
Выше мы зафиксировали данные об успешной транзакции, даже если вы получили временную метку.
источник
Просто чтобы закончить эту тему: Если вы настроили свою таблицу с первичным ключом и автоматическим приращением, вы можете пропустить процесс ручного увеличения идентификатора.
Проверьте этот пример
Теперь вы можете вставлять строки
источник
источник
Используя PHP-драйвер mysqli, вы не можете получить insert_id после фиксации.
Реальное решение заключается в следующем:
Источник для структуры кода: https://codeigniter.com/user_guide/database/transactions.html#running-transactions-manually
источник
Вы должны использовать
$lastId = $this->db->insert_id();
источник