172

フォーム フィールドを 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 の戻り値として何も取得しません

4

10 に答える 10

310

これを試して

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();
于 2013-05-08T12:15:11.540 に答える
69

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

function add_post($post_data) {
    $this->db->insert('posts',$post_data);
    return $this->db->insert_id();
}
于 2013-05-08T12:55:35.007 に答える
29
$id = $this->db->insert_id();
于 2013-05-08T12:22:12.253 に答える
10

ドキュメントから:

$this->db->insert_id()

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

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

$lastid = $this->db->insert_id();
于 2015-04-26T10:59:51.283 に答える
1

他の回答は Codeigniter バージョン 3 に関連していると言う価値があります。バージョン 4 の回答 ( https://codeigniter.com/user_guide/database/helpers.htmlが見つかりました) は、$this->db->insertID()

于 2021-07-06T14:45:04.210 に答える
0

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

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

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

于 2019-04-22T03:21:42.160 に答える