Подтвердить что ты не робот

Как получить последний идентификатор вставки после вставки запроса в активную запись codeigniter

У меня есть запрос вставки (активный стиль записи), используемый для вставки полей формы в таблицу MySQL. Я хочу получить последний auto-incremented id для операции insert как возвращаемое значение моего запроса, но у меня есть некоторые проблемы с ним.

Внутри контроллера:

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 в модели

4b9b3361

Ответ 1

Попробуйте это

function add_post($post_data){
   $this->db->insert('posts', $post_data);
   $insert_id = $this->db->insert_id();

   return  $insert_id;
}

В случае нескольких вставок вы можете использовать

$this->db->trans_start();
$this->db->trans_complete();

Ответ 2

Здесь транзакция не нужна, это должно быть достаточно:

function add_post($post_data) {
    $this->db->insert('posts',$post_data);
    return $this->db->insert_id();
}

Ответ 3

$id = $this->db->insert_id();

Ответ 4

В документации :

$this- > db- > insert_id()

Идентификационный номер вставки при вставке базы данных.

Следовательно, вы можете использовать что-то вроде этого:

$lastid = $this->db->insert_id();

Ответ 5

потому что вы инициировали транзакцию через вставку данных, поэтому: первая проверка транзакции завершена или нет. после запуска транзакции ее следует зафиксировать или откатить в соответствии со статусом транзакции;

function add_post($post_data){
  $this->db->trans_begin() 
  $this->db->insert('posts',$post_data);
  $this->db->trans_complete();
  if ($this->db->trans_status() === FALSE){
    $this->db->trans_rollback();
    return 0;
  }else{
    $this->db->trans_commit();
    return $this->db->insert_id();
  }
}''

Выше мы зафиксировали данные об успешной транзакции, даже если вы получили временную метку.

Ответ 6

Просто чтобы закончить эту тему: Если вы настроили свою таблицу с помощью первичного ключа и автоматического увеличения, вы можете пропустить процесс ручного увеличения идентификатора.

Посмотрите этот пример

if (!$CI->db->table_exists(db_prefix() . 'my_table_name')) {
    $CI->db->query('CREATE TABLE '' . db_prefix() . "my_table_name' (
  'serviceid' int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  'name' varchar(64) NOT NULL,
  'hash' varchar(32) NOT NULL,
  'url' varchar(120) NOT NULL,
  'datecreated' datetime NOT NULL,
  'active' tinyint(1) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=" . $CI->db->char_set . ';');

Теперь вы можете вставлять строки

$this->db->insert(db_prefix(). 'my_table_name', [
            'name'         => $data['name'],
            'hash'            => app_generate_hash(),
            'url'     => $data['url'],
            'datecreated'     => date('Y-m-d H:i:s'),
            'active'          => $data['active']
        ]);

Ответ 7

**Inside Model**
function add_info($data){
   $this->db->insert('tbl_user_info',$data);
   $last_id = $this->db->insert_id();
   return  $last_id;
}

**Inside Controller**
public function save_user_record() {
  $insertId =  $this->welcome_model->save_user_info($data);
  echo $insertId->id;
}

Ответ 8

Используя PHP-драйвер mysqli, вы не можете получить insert_id после фиксации.

Реальное решение заключается в следующем:

function add_post($post_data){
  $this->db->trans_begin();
  $this->db->insert('posts',$post_data);

  $item_id = $this->db->insert_id();

  if( $this->db->trans_status() === FALSE )
  {
    $this->db->trans_rollback();
    return( 0 );
  }
  else
  {
    $this->db->trans_commit();
    return( $item_id );
  }
}

Исходный код для структуры кода: https://codeigniter.com/user_guide/database/transactions.html#running-transactions-manually

Ответ 9

Вы должны использовать $lastId = $this->db->insert_id();