我有一个CodeIgniter/PHP模型,我想向数据库中插入一些数据。
但是,我在“原始”SQL查询中设置了以下内容:
ON DUPLICATE KEY UPDATE duplicate=duplicate+1
我正在使用CodeIgniter,并且正在将我之前所有的控制器内SQL查询转换为ActiveRecord。在基于ActiveRecord的模型中有什么方法可以做到这一点吗?
谢谢!
杰克
发布于 2013-04-05 00:03:03
您可以在不修改任何核心文件的情况下添加"ON DUPLICATE“语句。
$sql = $this->db->insert_string('table', $data) . ' ON DUPLICATE KEY UPDATE duplicate=LAST_INSERT_ID(duplicate)';
$this->db->query($sql);
$id = $this->db->insert_id();
我希望这能帮助到某个人。
发布于 2016-06-18 08:40:34
下面的过程适用于我在Codeigniter 3.0.6中的工作
public function updateOnDuplicate($table, $data ) {
if (empty($table) || empty($data)) return false;
$duplicate_data = array();
foreach($data AS $key => $value) {
$duplicate_data[] = sprintf("%s='%s'", $key, $value);
}
$sql = sprintf("%s ON DUPLICATE KEY UPDATE %s", $this->db->insert_string($table, $data), implode(',', $duplicate_data));
$this->db->query($sql);
return $this->db->insert_id();
}
发布于 2013-02-10 21:13:21
您可以通过添加最少的内容来调整活动记录功能:
DB_driver.php在类中添加:
protected $OnlyReturnQuery = false;
public function onlyReturnQuery($return = true)
{
$this->OnlyReturnQuery = $return;
}
find function query(在最开始添加...and:
if ($this->OnlyReturnQuery) {
$this->OnlyReturnQuery = false;
return $sql;
}
最后在DB_active_rec.php add function中:
public function insert_or_update($table='', $data=array())
{
$this->onlyReturnQuery();
$this->set($data);
$insert = $this->insert($table);
$this->onlyReturnQuery();
$this->set($data);
$update = $this->update($table);
$update = preg_replace('/UPDATE.*?SET/',' ON DUPLICATE KEY UPDATE',$update);
return $this->query($insert.$update);
}
现在,您可以将其用作:
$this->db->insert_or_update(‘表’,数组$data);
优点:使用所有活动记录验证缺点:这不是扩展函数的最佳(最合适的)方式,因为如果您计划更新这些文件,则必须重做该过程。
https://stackoverflow.com/questions/3361490
复制相似问题