কোডইনিটার সক্রিয় রেকর্ডে সন্নিবেশ কোয়েরির পরে কীভাবে শেষ সন্নিবেশ আইডি পাবেন


160

আমার একটি সন্নিবেশ ক্যোয়ারী রয়েছে (সক্রিয় রেকর্ড শৈলী) একটি মাইএসকিউএল টেবিলের মধ্যে ফর্ম ক্ষেত্রগুলি সন্নিবেশ করানোর জন্য ব্যবহৃত হয়। আমি আমার ক্যোয়ারির রিটার্ন মান হিসাবে সন্নিবেশ অপারেশনের জন্য সর্বশেষ স্ব-বর্ধিত আইডি পেতে চাই তবে এতে আমার কিছু সমস্যা আছে।

নিয়ামকের ভিতরে:

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

মডেলটিতে অ্যাড_পোস্টের রিটার্ন হিসাবে আমি কিছুই পাই না


4
যারা ভাবছেন তাদের জন্য, এ এর পরে db->insert_id()ফিরে আসুন । লেনদেন শেষ করার আগে নিশ্চিত হয়ে নিন যে আপনি এটি পেয়েছেন। falsedb->trans_complete()insert_id()
pbarney


যে কেউ দয়া করে এটি সদৃশ হিসাবে চিহ্নিত করুন।
কিশোর

উত্তর:


281

এটা চেষ্টা কর

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

1
লেনদেনের অযাচিত ব্যবহার। @ ক্রোলিক্সের উত্তর আরও সংক্ষিপ্ত।
আব্রাহাম ফিলিপ

1
@ আব্রাহাম সাম্প্রতিক প্রবেশ সম্পর্কে কী?
শেখর জোশী

3
@ শেখারজোশি আফিক ইনসার্ট_আইডি () ফাংশনগুলি আপনি ব্যবহার করছেন ডিবি অবজেক্ট দ্বারা সম্পাদিত শেষ সন্নিবেশের আইডি প্রদান করে। এটি সমবর্তী সন্নিবেশগুলি পরিচালনা করা উচিত, তাই না? আমি ভুল হলে আমাকে সংশোধন করুন।
অব্রাহাম ফিলিপ

কোডইনিটার কীভাবে জানতে পারে যে কোনও নির্দিষ্ট বস্তু দ্বারা কোন সারি যুক্ত হয়েছিল?
শেখর যোশি

3
@ শেখরজোশি এটি অবজেক্টগুলির বিষয়ে নয়, সিআইয়ের ইনসার্ট_আইডি () মাইএসকিউএল এর লাস্ট_ইনটার_আইডি () অনুসারে সর্বশেষ সন্নিবেশিত আইডি প্রদান করে, যা প্রতি সংযোগের ভিত্তিতে সর্বশেষ .োকানো আইডি রাখে। এ কারণে, সর্বশেষ idোকানো আইডির জন্য লেনদেনের প্রয়োজন হয় না।
সেবাস্তিয়ানব

65

এখানে কোনও লেনদেনের প্রয়োজন নেই, এটি পর্যাপ্ত হওয়া উচিত:

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

1
সমকালীন সন্নিবেশ সম্পর্কে কি?
পিমিন কনস্ট্যান্টিন কেফলালোকস

9
@ এমেন্ডার আমি বিশ্বাস করি insert_id () ডাবল অবজেক্ট দ্বারা ডাকা সর্বশেষ সন্নিবেশটির আইডি ফিরিয়ে দেয়। এমনকি সমবর্তী সন্নিবেশকারীদের উপস্থিতিতেও এর অর্থ এই নয় যে এটি সর্বদা এই নির্দিষ্ট ডিবি অবজেক্টটি সন্নিবেশের সাথে সম্পর্কিত আইডিটি ফেরত দেয়?
অব্রাহাম ফিলিপ


10

ডকুমেন্টেশন থেকে :

$ This-> db-> insert_id ()

ডাটাবেস সন্নিবেশ করানোর সময় সন্নিবেশ আইডি নম্বর।

অতএব, আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

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

3
দয়া করে কেবল একটি লিঙ্ক দেবেন না তবে সমাধানটির সংক্ষিপ্তসারটি এখানে দেওয়ার চেষ্টা করুন

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

উপরের হিসাবে, আমরা সফল লেনদেনের ডেটা প্রতিশ্রুতিবদ্ধ করেছি এমনকি আপনি টাইমস্ট্যাম্পটি পেয়েছেন


0

কেবলমাত্র এই বিষয়টি সম্পূর্ণ করার জন্য: আপনি যদি প্রাথমিক কী এবং অটো বর্ধনের সাহায্যে আপনার টেবিলটি সেট করেন তবে আপনি আইডিটিকে নিজে বাড়ানোর প্রক্রিয়াটি বাদ দিতে পারেন।

এই উদাহরণটি দেখুন

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
**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;
}

0

Mysqli পিএইচপি ড্রাইভার ব্যবহার করে, প্রতিশ্রুতিবদ্ধতার পরে আপনি insert_id পেতে পারবেন না get

আসল সমাধানটি হ'ল:

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/datedia/transferences.html#running-transजे- ম্যানুয়ালি


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.