【问题标题】:CodeIgniter UPDATE and LIMITCodeIgniter 更新和限制
【发布时间】:2017-04-06 22:11:18
【问题描述】:

我知道这个问题在Update with limit 1 in codeigniter use active record之前已经发布过

但似乎使用 Active Record 结合 UPDATE 和 LIMIT 对我来说不起作用。它仍然会根据 WHERE 子句更新所有记录。我目前正在使用 CodeIgniter 3.0.6。这已经是 CodeIgniter 的错误了吗?

screenshot of the query

【问题讨论】:

  • 显示来自sendidb 模型的update 方法
  • sendidb 不是模型,它和$this->db 一样,我只是将sendidb 指定为数据库对象

标签: codeigniter


【解决方案1】:

您不能直接在更新查询中添加限制。我有另一种方法。首先,您通过 where 查询获得一行,然后使用获取行唯一键(如唯一自动增量 ID)运行更新查询。

$singleInfo = $this->db->get_where($tbl, array('user_id'=>1));
$this->db->update($tbl,array('username'=>'FredSmith'),array('user_id'=>$singleInfo->id));

【讨论】:

    【解决方案2】:

    好吧,我启动了 CI 3.0.6 并将其用作演示,因为我们看不到您的设置。

    public function db_update_test_with_limit(){
        $tbl = 'users';
    
        // Use Chaining - Works
        $this->db
            ->where('user_id',1)
            ->limit(1)
            ->update($tbl,array('username'=>'FredSmith'));
        echo $this->db->last_query();
    
        // Use discrete calls -  Works
        $this->db->where('user_id',1);
        $this->db->limit(1);
        $this->db->update($tbl,array('username'=>'FredSmith'));
        echo '<br>';
        echo $this->db->last_query();
    }
    

    两者的结果都是……

    UPDATE `users` SET `username` = 'FredSmith' WHERE `user_id` = 1 LIMIT 1
    UPDATE `users` SET `username` = 'FredSmith' WHERE `user_id` = 1 LIMIT 1
    

    因此,如果您做同样的事情并得到不同的结果,那么就会发生一些奇怪的事情。

    如果您将此作为测试并根据您的情况对其进行按摩,它是否有效?

    【讨论】:

    • 嗯,对我来说真的行不通。现在我很困惑发生了什么。我没有更改 CodeIgntier 中的任何代码,甚至没有覆盖 CodeIgniter 中的任何内容
    • 我也试过这个:$this->sendidb->query("UPDATE SchoolStatusChanged SET FromDate='".$data['CommencementDate']."' WHERE SchoolId='1' LIMIT 1" )。虽然,当我 last_query 它显示 LIMIT 部分但它根本不更新任何记录
    • 很抱歉说的很明显,但是您是否将 $data['CommencementDate'] 更改为不同的值以查看它是否确实发生了变化。如果您将它作为直接 SQL 运行并且它不起作用,那么我们在这里遗漏了一些非常明显的东西。
    • 只是另一个问题...如果您在数据库上运行直接的普通 ole SQL 语句并且您没有看到它发生变化...您正在查看您认为指向的同一个数据库在你的配置中?这是以前从未发生过的:)
    • 抱歉回复晚了。我刚刚确认我更改了 CommencementDate 的值,它指向了正确的数据库。真的很令人困惑和失望,因为 LIMIT 子句将解决我系统中的很多逻辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2014-12-09
    • 2019-01-19
    • 1970-01-01
    • 2011-07-28
    相关资源
    最近更新 更多