[英]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();
or die(mysql_error());
看看你的虫子。 固定:
$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.