大家好我正在使用codeigniter。我有一个产品列表,其中列数量为#q;'。现在我需要在数量上已经存在的值中添加新值。
在:
+----+-------------+
| id | qty |
+----+-------------+
| 1 | 5 |
| 2 | 12 |
| 3 | 50 |
| 4 | 35 |
+----+-------------+
我在帮助程序中尝试过此查询(我在查询之前已经检查过$qty
和$productID
的值):
$qty = 20;
$productID = 1;
$query = $ci->db->query('UPDATE products SET qty = qty + ' . $qty . ' WHERE id = "' . $productID . '"');
在此查询之后,它始终将值更新为0,而不是添加到上一个示例中。 查询返回true但始终将0添加到db。这是为什么 ? 我见过许多使用相同查询的例子,但它并没有发生在我身上。我该如何解决这个问题?
答案 0 :(得分:0)
试试这个:
private function getQty($productId)
{
$db = $this->db;
$db->select('qty')->from('products')->where('id', $productId);
$result = $db->get()->row();
if ($result)
{
return $result;
}
else
{
return false;
}
}
public function update($productId, $newQty)
{
$db = $this->db;
$oldQty = $this->getQty($productId);
$qty = $oldQty + $newQty;
$data['qty'] = $qty;
$db->where('id', $productId)->update('products', $data);
if ($db->affected_rows())
{
return true;
}
else
{
return false;
}
}
答案 1 :(得分:0)
这是codeigniter方式:
第三个参数是FALSE意味着你告诉你不要逃避文本
$this->db->set('qty', 'qty + ' . $qty, FALSE)
->where('id', $productID )
->update('products');
答案 2 :(得分:0)
尝试这样做:
$this->db->where('id', $productID);
$this->db->set('qty', 'qty + ' . $qty, FALSE);
$this->db->update('products');
FALSE 会给出:
UPDATE products SET qty = qty + 5 WHERE id = '1'
而不是:
UPDATE products SET qty = 'qty + 5' WHERE id = '1'
更多详情here。