PHP中如何正确实现字段增量更新?库存增量计算求助
CodeIgniter实现库存增量更新问题
问题描述
在使用PHP(CodeIgniter框架)处理库存更新时,希望每次操作将qty字段增量更新(可用库存+入库库存),而非直接覆盖原数值。
原有代码(直接覆盖库存):
$prodid = $this->input->post('product')[$x]; if($prodid){ $product_quanti = array( 'qty' => $this->input->post('qty')[$x], ); $this->db->where('id', $prodid); $update = $this->db->update('products', $product_quanti); }
尝试修改后(错误翻倍):
$prodid = $this->input->post('product')[$x]; if($prodid){ $product_quanti = array( 'qty' => $this->input->post('qty')[$x] + $this->input->post('qty')[$x], ); $this->db->where('id', $prodid); $update = $this->db->update('products', $product_quanti); }
上述修改后,库存会错误翻倍(如原库存200,输入500后变成1000),需要实现正确的增量更新。
错误原因
当前代码是将POST传入的入库库存值自身相加(相当于输入值×2),然后覆盖数据库中的原有库存,完全没有用到数据库里的现有库存数值,所以结果错误。
正确解决方案
要实现基于数据库现有库存的增量更新,需要让数据库执行qty = qty + 入库值的运算,CodeIgniter提供了对应的set()方法来实现:
$prodid = $this->input->post('product')[$x]; if($prodid){ // 获取入库库存值,强制转为整数避免非法值 $input_qty = (int)$this->input->post('qty')[$x]; // 仅当入库值为正数时执行更新 if($input_qty > 0){ $this->db->where('id', $prodid); // 第三个参数FALSE表示不自动转义,让数据库执行字段运算 $this->db->set('qty', 'qty + ' . $input_qty, FALSE); $update = $this->db->update('products'); } }
说明
- 使用
$this->db->set()的第三个参数FALSE,可以避免CodeIgniter将运算表达式转义为字符串,确保数据库能正确执行qty = qty + 输入值的增量操作。 - 增加
(int)强制类型转换和$input_qty > 0的判断,避免负数、字符串等非法数值导致的库存异常。
内容的提问来源于stack exchange,提问作者wloleo
相关产品推荐
相关产品推荐

