2016-05-06 26 views
-1

Codigniter 3の最後のinsert_idに問題があります。Codeigniter insert_id()奇妙な問題

最後に挿入されたorg_idを取得したいとします。しかし、エラーで私はトランザクションを記録するクエリの後に最後に挿入されたIDを取得するために、次のコマンドを入れます。

  // grab org_id from insert 
      $insert_org_id = $this->db->insert_id();  

      // create preset levels 
      $this->preset_levels($insert_org_id); 

したがって、最後に挿入されたIDをログテーブルから正しく返しました。以下コントローラーエキス:下のコントローラーエキスを参照してください、組織を追加するには、コマンドの後に

  // grab org_id from insert 
      $insert_org_id = $this->db->insert_id();  

      // create preset levels 
      $this->preset_levels($insert_org_id);     

::だから

  // send org_data to model for db input 
      $this->org_model->add_org($org_data);         

      // audit log 
      // serialize data array for audit log 
       $serialised_array = serialize($org_data);  

       // specify audit log title 
       $log_title = 'Create Organisation';  

       // send data to audit log model 
       $this->audit_model->add_log($serialised_array,$log_title);  
      // end audit log entry 

      **// grab org_id from insert 
      $insert_org_id = $this->db->insert_id();  
      // create preset levels 
      $this->preset_levels($insert_org_id);** 

は、私はちょうどこれを移動する病気、細かい考え

  // send org_data to model for db input 
      $this->org_model->add_org($org_data); 

      **// grab org_id from insert 
      $insert_org_id = $this->db->insert_id();  
      // create preset levels 
      $this->preset_levels($insert_org_id);**             

      // audit log 
      // serialize data array for audit log 
       $serialised_array = serialize($org_data);  

       // specify audit log title 
       $log_title = 'Create Organisation';  

       // send data to audit log model 
       $this->audit_model->add_log($serialised_array,$log_title);  
      // end audit log entry  

しかし、それは任意の値を返しませんか?挿入されたorg_idは数字ではありませんが、それは問題でしょうか?

両方の挿入は非常に単純なデータベース挿入され、以下を参照してください:

org_model

// add new organisation 
public function add_org($org_data) { 
    $this->db->insert('organisations', $org_data); 
} 

における組織メソッドを追加して、audit_modelに

// add audit log entry 
public function add_log($serialised_array,$log_title) {  

    // capture current date & time for audit log 
    date_default_timezone_set('Europe/London'); 
    $date = date('Y-m-d H:i:s'); 

    // build array of log data 
    $log_data = array(
     'log_datetime' => $date, 
     'log_org_id' => $this->session->userdata('org_id'), 
     'log_user_id' => $this->session->userdata('user_id'), 
     'log_user_name' => $this->session->userdata('username'), 
     'log_title'  => $log_title, 
     'log_detail' => $serialised_array 
    ); 
    // insert log data to db 
    $this->db->insert('audit_log', $log_data); 

} 

をログメソッドを追加し、なぜ1つの作業を行いますもう一つは?何が違う?

答えて

2

insert_id()は、特定の接続に対して生成された最後の自動インクリメント値を返す必要があります。 org_idが数値フィールドでない場合は、自動インクリメントにすることはできないため、insert_id()は値を返しません。

+0

わかりました。非数値の自動インクリメント挿入の最後の値を取得する簡単なコマンドがありますか? – frobak

+0

カラムが自動インクリメントでない場合、そのデフォルト値を除いてカラムに自動的に値が割り当てられないため、そのようなコマンドはありません(いつでもselectを実行できます)。あなたのPHPまたはSQLコードで非数値のIDを生成し、明示的にテーブルに挿入する必要があります。 – Shadow