我想增加博客文章视图中的整数值。我在 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);
与此查询获得相同的结果。
无论如何,脚本都会运行多次。在对我无辜的代码进行了太多思考之后,我制定了一个临时解决方案,通过计算机的技巧来运行此脚本一次。我使用具有 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);
首先,会话为空,紧接着代码会话不为空,因此脚本运行一次,并且很好地添加了单个视图。
当您从数据库获取先前的值时,您是否尝试过使用 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);