gpt4 book ai didi

php - MySQL VALUES() 函数不适用于 Codeigniter db->query()

转载 作者:行者123 更新时间:2023-11-29 10:39:07 24 4
gpt4 key购买 nike

我正在努力完成这项工作:

$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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com