繁体   English   中英

用PHP更新MySQL中超过100万亿的大量数据是不可靠的

[英]updating a large number in MySQL larger than 100 trillion with PHP is unreliable

当我像这样用PHP向MySQL发送值时:

$mysqli->query("update bank set cash = $cash");

它适用于较小的数字,但任何100万亿或更大的数字都会产生意外结果。 有时它以100为增量更新数字,有时则根本不更新。

一旦数量超过数十亿,准备好的语句也会产生不同但不可靠的结果:

$stmt->prepare("update bank set cash = ?");
$stmt->bind_param('i',$new_cash_amt);
$stmt->execute();
  1. 使用双引号。
  2. 使用or die(mysql_error()); 看看你的虫子。
  3. 停止使用mysql *函数,将很快弃用。

固定:

$amount = 17;
$mysqli->query("
        update player_stats 
        set cash = cash + $amount 
        where username = 'cheater2'
") or die(mysql_error());

您使用的是单引号,不会解析php变量。 它正在寻找cash=cash+$amount作为一个字符串,而不是一个包含数据的变量。

我在这里回答我自己的问题。

事实证明,当您传递这样的值时:

$huge_number = 100000000000012345;
echo "The huge_number is: $huge_number";

它将打印以下内容:

huge_number是:1.0000000000001E + 17

此转换将丢失精确值。 这就是为什么该值有时以100的倍数递增,而在其他时间则完全没有递增的原因。

与准备好的语句一样,任何大于32位整数的值(因为我在绑定参数中输入了'i'作为类型)都会被截断和意外更改。 我应该将新值作为d传递,如下所示:

$stmt->bind_param('d',$new_cash_amt); //This works correctly

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM