简体   繁体   中英

Codeigniter Active Record Insert Function

So i have been pulling my hair out over this for the past two days. I have identified the problem down to this so far:

I am inserting some simple data into the database using Active Record:

if($this->db->insert('table', $data)){
    return true;
}
else{
    return false;
}

The problem is that it was always returning true whether the data got inserted or not. How i figured this out was that after several failed attempts when the data finally got inserted, the AUTO_INCREMENT ID was at 17, meaning that the insert query was running but failing to insert, hence always returning true. I want to know a reliable method of knowing whether data got inserted or not. Tried:

$this->db->affected_rows() > 0;

as well. But same issue prevails. It returns true.

If you have auto incremental id in your table then check $this->db->insert_id()

if greater the zero or us number then we can say data inserted or

again fire a sql query with id we get and if record exist then data is inserted

but i think that is not necessary just check insert_id

This is what I do. It works for me.

$this->db->set($data)->insert($table_name);
if ($this->db->affected_rows()) {
     return $this->db->insert_id(); // or return true; in your case
}
return false;

You need to insert your data first and get the result after. You will need to do something like this:

$this->db->insert('my_table', $my_data);
$is_inserted = $this->db->affected_rows() > 0;
if($is_inserted) {
    echo 'Yay! Its works!';
} else {
    echo 'Something went wrong. No insert ):'
}

You must perform your insert query before get the result. So you will need to run your insert and then get the affected rows. Codeigniter provides the class $this->db that help us to do this very easily. You can even get the inserted id running $this->db->insert_id() instead $this->db->affected_rows() to get the brand new inserted id.

You may find these links useful:

Query Helper Functions - https://ellislab.com/codeigniter/user-guide/database/helpers.html

Active Record Class https://ellislab.com/codeigniter/user-guide/database/active_record.html

Good Luck!

i always do this for check data is inserted or not

$this->db->insert('table', $data);
$id = $this->db->insert_id();
if($id)
{
  echo "data inserted";
}
else
{
  echo "data not inserted"; 
}

you can also do this also worked for me

$query = $this->db->insert('table', $data);
    if($query)
    {
      echo "data inserted";
    }
    else
    {
      echo "data not inserted"; 
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM