来自 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 = ?;
将占位符作为参数传递 -- 而不是修改查询字符串。
我正在做一个与数据库一起工作的实验,我得到了这个奇怪的结果。
系统是这样的: 我有一个按钮,每次单击它时计数器都会加 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 = ?;
将占位符作为参数传递 -- 而不是修改查询字符串。