来自 PHP、SQL 查询的奇怪结果

Curious result from PHP, SQL query

我正在做一个与数据库一起工作的实验,我得到了这个奇怪的结果。

系统是这样的: 我有一个按钮,每次单击它时计数器都会加 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'";

我从分数 = 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 吗? 我现在真的有点困惑。

B'rgrds,

评论有点长

毫无疑问,这是由于 score$divisor 的不同表示或将 $divisor 转换为查询字符串造成的。很难准确指出问题出在哪里,因为有几个不同的地方。

如果确实需要处理,在数据库中进行计算:

UPDATE board
    SET score = score * (1 - ?)
    WHERE player = ?;

将占位符作为参数传递 -- 而不是修改查询字符串。