[フレーム]
Last Updated: July 27, 2018
·
17.77K
· garygarside

Codeigniter Active Record - on duplicate key update

Simply add the following function to your system/database/DBactiverec.php file:

/**
 * public function on_duplicate
 * Compiles an on duplicate key update string and runs the query
 * 
 * @access public
 * @param string - the table to retrieve the results from
 * @param array - an associative array of update value
 * @return object
 */
function on_duplicate($table = '', $set = NULL )
{
 if ( ! is_null($set))
 {
 $this->set($set);
 }

 if (count($this->ar_set) == 0)
 {
 if ($this->db_debug)
 {
 return $this->display_error('db_must_use_set');
 }
 return FALSE;
 }

 if ($table == '')
 {
 if ( ! isset($this->ar_from[0]))
 {
 if ($this->db_debug)
 {
 return $this->display_error('db_must_set_table');
 }
 return FALSE;
 }

 $table = $this->ar_from[0];
 }


 $sql = $this->_duplicate_insert($this->_protect_identifiers($this->dbprefix.$table), $this->ar_set );

 $this->_reset_write();
 return $this->query($sql);
}

Then call using Active Record notation like so in your model:

$this->db->on_duplicate('database_table', $array);

This will update all details in an array for a row where the primary key already exists. If it doesn't exist, it will add it for you!

2 Responses
Add your response

Nice ;)

over 1 year ago ·

Where's the definition of your duplicateinsert() function?

over 1 year ago ·

AltStyle によって変換されたページ (->オリジナル) /