PHP+;MySQL不规则计算问题超过一百万

PHP+;MySQL不规则计算问题超过一百万,php,mysql,calc,Php,Mysql,Calc,当我尝试使用PHP函数重新存储产品时,我遇到了一个非常奇怪的问题 下面是函数: function add_stock($products_id, $add_quantity) { global $db; $db->Execute("update " . TABLE_PRODUCTS . " set products_quantity = products_quantity + " . (int)$add_quantity . ", products_or

当我尝试使用PHP函数重新存储产品时,我遇到了一个非常奇怪的问题

下面是函数:

function add_stock($products_id, $add_quantity) {
global $db;
$db->Execute("update " . TABLE_PRODUCTS . "
                  set products_quantity = products_quantity + " . (int)$add_quantity . ", products_ordered = products_ordered - " . (int)$add_quantity . " where products_id = '" . (int)$products_id . "'");
}
因此,在上面的函数中,我关注的区域是将
产品\u数量
添加到
$add\u数量
中的时间

一切都很好,但当我测试一个产品的数量达到或超过1000000时,它会进行奇怪的计算

例如,测试产品的数量为1000000。使用该函数添加8使其达到1000 010。所以不是加8,而是加10。我用6和8再次运行它,它会变成10000020,然后是100000030。比如10的增量。我很困惑

我尝试了十几种其他产品,数量在一百万以下,每次都能完美地工作


编辑:通过注释询问后-产品的数据类型\u数量为浮动。

浮动精度较低,需要四舍五入。这就是问题所在


将列的数据类型更改为
DECIMAL
NUMERIC
INT
,或
BIGINT
,浮点精度低,需要舍入。这就是问题所在


将列的数据类型更改为
DECIMAL
NUMERIC
INT
BIGINT
products\u quantity
的数据类型是什么?最好使用预先准备好的语句,而不是串联变量。我假设您使用的是固定精度数据类型,而不是浮点,正确的?也就是说,使用十进制、数字、INT、BIGINT中的一种。它与相减的
产品有什么关系?FLOAT的精度很低,需要四舍五入。这就是问题所在。将数据类型更改为我提到的数据类型之一。
products\u quantity
的数据类型是什么?如果使用准备好的语句而不是串联变量会更好。我假设您使用的是固定精度数据类型,而不是浮点数,对吗?也就是说,使用十进制、数字、INT、BIGINT中的一种。它与相减的
产品有什么关系?FLOAT的精度很低,需要四舍五入。这就是问题所在。将数据类型更改为我提到的数据类型之一。