首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在我的CodeIgniter模型中使用重复密钥更新?

如何在我的CodeIgniter模型中使用重复密钥更新?
EN

Stack Overflow用户
提问于 2010-07-29 18:25:09
回答 8查看 40.6K关注 0票数 22

我有一个CodeIgniter/PHP模型,我想向数据库中插入一些数据。

但是,我在“原始”SQL查询中设置了以下内容:

代码语言:javascript
复制
ON DUPLICATE KEY UPDATE duplicate=duplicate+1

我正在使用CodeIgniter,并且正在将我之前所有的控制器内SQL查询转换为ActiveRecord。在基于ActiveRecord的模型中有什么方法可以做到这一点吗?

谢谢!

杰克

EN

回答 8

Stack Overflow用户

发布于 2013-04-05 00:03:03

您可以在不修改任何核心文件的情况下添加"ON DUPLICATE“语句。

代码语言:javascript
复制
$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();

我希望这能帮助到某个人。

票数 56
EN

Stack Overflow用户

发布于 2016-06-18 08:40:34

下面的过程适用于我在Codeigniter 3.0.6中的工作

代码语言:javascript
复制
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();
}
票数 6
EN

Stack Overflow用户

发布于 2013-02-10 21:13:21

您可以通过添加最少的内容来调整活动记录功能:

DB_driver.php在类中添加:

代码语言:javascript
复制
protected $OnlyReturnQuery = false;
public function onlyReturnQuery($return = true)
{
    $this->OnlyReturnQuery = $return;
}

find function query(在最开始添加...and:

代码语言:javascript
复制
    if ($this->OnlyReturnQuery) {
        $this->OnlyReturnQuery = false;
        return $sql;
    }

最后在DB_active_rec.php add function中:

代码语言:javascript
复制
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);

优点:使用所有活动记录验证缺点:这不是扩展函数的最佳(最合适的)方式,因为如果您计划更新这些文件,则必须重做该过程。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3361490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档