如何将两个变量的商存入数据库并以百分比形式输出
问题
当前用以下代码更新数据库时,student_quiz表的grade字段会存储类似「50 out of 500」的字符串,但实际需求是存储$score与$total的商(比如0.1);同时查询该字段时,需要以百分比形式(比如10%)回显。
原更新代码:
$score = 50 $total = 500 mysqli_query($conn,"UPDATE student_quiz SET `grade` = ".$score." out of ".$total."')
原查询显示代码:
$query1 = mysqli_query($conn,"select * from student_class_quiz where class_quiz_id = '$id' and student_id = '$session_id'")or die(mysqli_error()); $row1 = mysqli_fetch_array($query1); $grade = $row1['grade']; <?php echo $grade; ?>
解决方案
一、修改数据库更新逻辑
先计算得分与总分的商,同时处理总分为0的边界情况(避免除以0报错);另外用参数化查询替代字符串拼接,防止SQL注入。
修改后的更新代码:
$score = 50; $total = 500; // 总分不为0时计算商,否则设为0 $gradeValue = $total !== 0 ? $score / $total : 0; // 参数化执行更新操作 $stmt = $conn->prepare("UPDATE student_quiz SET `grade` = ?"); $stmt->bind_param("d", $gradeValue); // "d"表示绑定double类型参数 $stmt->execute(); $stmt->close();
二、修改查询与显示逻辑
从数据库取出存储的商值后,乘以100转换为百分比,再通过number_format格式化输出(可根据需求调整小数位数)。
修改后的查询显示代码:
$query1 = mysqli_query($conn,"SELECT grade FROM student_class_quiz WHERE class_quiz_id = '$id' AND student_id = '$session_id'") or die(mysqli_error()); $row1 = mysqli_fetch_array($query1); $grade = $row1['grade']; // 转换为百分比,这里保留1位小数,要整数则将第二个参数改为0 $percentage = number_format($grade * 100, 1) . '%'; echo $percentage;
关键注意点
- 确保
student_quiz和student_class_quiz表中的grade字段为数值类型(如FLOAT、DOUBLE或DECIMAL),若之前是字符串类型,需先修改字段类型才能存储小数 - 原代码存在SQL注入风险,参数化查询是更安全的写法,务必替换
内容的提问来源于stack exchange,提问作者Christian Paquibot
相关产品推荐
相关产品推荐

