Любопытный результат от PHP, SQL-запрос

Я работаю над экспериментом, который работает с базой данных, и я получил этот странный результат.

Система работает так:
У меня есть кнопка, которая добавляет 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,

0

Решение

Это немного долго для комментария.

Это, несомненно, вызвано различными представлениями о score а также $divisor или путем преобразования $divisor в строку для запроса. Трудно указать, где именно проблема, потому что есть несколько разных мест.

Если вам действительно нужно справиться с этим, сделайте вычисления в базе данных:

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

Передавайте заполнители в качестве параметров, а не отправляйте строку запроса.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]