以增量方式更新错误的整数值 mysql Codeigniter 4

问题描述 投票:0回答:2

我想增加博客文章视图中的整数值。我在 Codeigniter4 的控制器顶部使用了这段代码:

$db = \Config\Database::connect();
$builder = $db->table('blog');
$builder->set('view', 'view+1', FALSE);
$builder->where('id', $id);
$builder->update();

刷新页面时正在更新数据库中的 ..2,4,6,8.. 而不是 1,2,3,4。如果我使用'view+2',更新2,6,10,14..但是为什么呢?这个基本数学计算有什么问题吗?

我花了一整天的时间来解决,但没有找到任何解决方案。

$view = "Get previous view value from db";
$data['view'] = $view + 1;
                
$db = \Config\Database::connect();
$builder = $db->table('blog');
$builder->where('id', $id);
$builder->update($data);

与此查询获得相同的结果。

mysql sql-update codeigniter-4
2个回答
0
投票

无论如何,脚本都会运行多次。在对我无辜的代码进行了太多思考之后,我制定了一个临时解决方案,通过计算机的技巧来运行此脚本一次。我使用具有 5 秒有效时间的会话 Tempdata 来运行脚本一次。

$session = \Config\Services::session(); // This line added very top of the code
if($session->single_view == null){
    $db = \Config\Database::connect();
        $builder = $db->table('blog');
        $builder->set('view', 'view+1', FALSE);
        $builder->where('id', $id);
        $builder->update();
          }
$session->setTempdata('single_view', '1', 5);

首先,会话为空,紧接着代码会话不为空,因此脚本运行一次,并且很好地添加了单个视图。


-1
投票

当您从数据库获取先前的值时,您是否尝试过使用 type (int) 或 intval($view) ?

$view = "Get previous view value from db";
$data['view'] = intval($view) + 1;
                
$db = \Config\Database::connect();
$builder = $db->table('blog');
$builder->where('id', $id);
$builder->update($data);
© www.soinside.com 2019 - 2024. All rights reserved.