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

标签 php mysql codeigniter codeigniter-3

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

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

相关文章:

php - 如何通过 PHP 使用 group 来统计 mysql?

database - Codeigniter 未定义属性:xxxx_model::$db 仅来自模型

php - 从多列中选择 : codeIgniter

php - 存储过程将 codeigniter 与 mysql 数据库断开连接

php - 删除多个复选框上的行后未获取 $_GET 的值?

php - 插入不适用于 PHP 变量

php - 包含或需要的文件是通过互联网传输还是仅在服务器上访问?

php - 获取给定里程的特定区域的数据

mysql - 获取mysql中某个字段的长度进行查询

php - 选择在带连字符的列名称上失败