我正在努力完成这项工作:
$articles_id = 105; // comes from argument
$type = 'units_out'; // comes from argument
$quantity = 4; // comes from argument
$date = date('Y-m-d');
$sql = "INSERT INTO stock (articles_id, date, units_in, units_out)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE $type = IF(VALUES($type) - $quantity >= 0, VALUES($type) - $quantity, 0)";
$res = $this->db->query($sql, array($articles_id, $date, 0, $quantity));
该记录已存在,因此会进行更新。 BD 中 units_out 的初始值为 2,它是一个 UNSIGNED MEDIUMINT 字段。因此,由于它是无符号类型,因此 2 - 4 = -2,这对于 UNSIGNED MEDIUMINT 意味着从其最大值开始倒计时。
查询后,units_out=16777215。我想通过使用 MySQL 的 VALUES() 函数来避免这种行为,但如果我将它与 bd->query()
一起使用,它就不起作用我尝试直接在 PHPMyAdmin 中执行此操作,它确实有效,units_out 结果为 0。为什么这在 Codeigniter 中不起作用?
最佳答案
在 if 中再添加一个条件, (VALUES($type) > $quantity) ,例如
$sql = "INSERT INTO stock (articles_id, date, units_in, units_out)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE $type = IF((VALUES($type) > $quantity) and (VALUES($type) - $quantity >= 0), VALUES($type) - $quantity, 0)";
或者简单地添加大于条件,而不是检查减法 > 0
$sql = "INSERT INTO stock (articles_id, date, units_in, units_out)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE $type = IF(VALUES($type) >= $quantity, VALUES($type) - $quantity, 0)";
关于php - MySQL VALUES() 函数不适用于 Codeigniter db->query(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45862504/