我正在做一个与数据库一起工作的实验,我得到了这个奇怪的结果。
系统是这样的:我有一个按钮,每次你点击它时,计数器都会加 1。一旦达到一定数量,它会计算分数扣除并更新分数
PHP:
$counter = $_POST['counter'];
$user = $_POST['user'];
$sql = "SELECT score FROM board WHERE player = '$user'";
$result = mysqli_query($con,$sql);
$row = mysqli_fetch_array($result);
if($counter == 1)
$divisor = 0;
else if($counter == 5)
$divisor = 0.1;
else if($counter == 20)
$divisor = 0.3;
else if($counter == 50)
$divisor = 1;}
$deduction = $row['score'] * $divisor;
$sql = "UPDATE board SET score = score - ".$deduction." WHERE player = '$user'";
我从 score = 10 开始,这些是结果
Score: 10
Counter: 1
Divisor = 0; Deduction = 10 * 0;
UPDATE ... score = score - Deduction (0)
New score = 10
-------------------------------------
Score: 10
Counter: 5
Divisor = 0.1; Deduction = 10 * 0.1;
UPDATE ... score = score - Deduction (1)
New score = 9
-------------------------------------
Score: 9
Counter: 20
Divisor = 0.3; Deduction = 9 * 0.3;
UPDATE ... score = score - Deduction (2.7)
New score = 6.3
-------------------------------------
## Here is the curious part
Score: 6.3
Counter: 50
Divisor = 1; Deduction = 6.3 * 1;
UPDATE ... score = score - Deduction (6.3)
New score = 0.000000190735
知道为什么我得到0.000000190735吗?我现在真的有点困惑。
巴格兹,
评论有点长。
毫无疑问,这是由查询的字符串的不同表示score
和/$divisor
或转换为$divisor
字符串引起的。很难准确指出问题出在哪里,因为有几个不同的地方。
如果你真的需要处理这个,在数据库中进行计算:
UPDATE board
SET score = score * (1 - ?)
WHERE player = ?;
将占位符作为参数传入——而不是修改查询字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句