web-dev-qa-db-ja.com

codeigniterのアクティブレコードに挿入クエリの後に最後の挿入IDを取得する方法

フォームフィールドをMySQLテーブルに挿入するために使用される挿入クエリ(アクティブレコードスタイル)があります。私は私のクエリの戻り値として挿入操作のための最後の自動インクリメントIDを取得したいのですが、私はそれにいくつかの問題があります。

コントローラ内部:

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の戻り値として何も得られない

146

これを試して

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();
243
Sudz

ここではトランザクションは必要ありません。これで十分です。

function add_post($post_data) {
    $this->db->insert('posts',$post_data);
    return $this->db->insert_id();
}
62
Crowlix
$id = $this->db->insert_id();
29
Simon Carlson

のドキュメントから

$ this-> db-> insert_id()

データベース挿入を実行するときの挿入ID番号。

したがって、このようなものを使うことができます。

$lastid = $this->db->insert_id();
9
Md.Jewel Mia

このトピックを完成させるために:主キーと自動インクリメントを使ってテーブルを設定する場合は、IDを手動でインクリメントするプロセスを省略することができます。

この例をチェックしてください

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']
        ]);
0
Fabus

あなたはそうデータの挿入を介してトランザクションを開始したので、最初のトランザクションが完了したかどうかを確認します。トランザクションを開始したら、トランザクションのステータスに従ってコミットまたはロールバックする必要があります。

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();
  }
}``

上記では、あなたがタイムスタンプを取得したとしても、成功したトランザクションのデータをコミットしました。

0
KISHOR PANT