如何在MySQL查询结果表格的最后一行实现age列求和?
解决表格最后一行求和age列的方法
有两种常用方式可以实现这个需求,同时要注意你的代码存在SQL注入风险,先帮你修正这个问题,再实现求和:
方法一:循环时累加计算总和
在遍历数据的过程中,把每个age的值累加起来,循环结束后输出求和的行:
if (isset($_POST['date1']) && isset($_POST['date2'])) { // 使用预处理语句避免SQL注入 $sql = "SELECT * FROM user WHERE signup_date BETWEEN ? AND ?"; $stmt = mysqli_prepare($conn, $sql); mysqli_stmt_bind_param($stmt, "ss", $_POST['date1'], $_POST['date2']); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); if (mysqli_num_rows($result) > 0) { $x = 0; $totalAge = 0; // 初始化总和变量 while ($row = mysqli_fetch_assoc($result)) { $totalAge += $row["age"]; // 累加年龄 $output = '<tr> <td>' . ++$x . '</td> <td>' . $row["name"] . '</td> <td>' . $row["email"] . '</td> <td>' . $row["age"] . '</td> <td>' . $row["signup_date"] . '</td> </tr>'; echo $output; } // 输出求和行 echo '<tr> <td colspan="3" align="right"><strong>总年龄:</strong></td> <td><strong>' . $totalAge . '</strong></td> <td></td> </tr>'; } }
方法二:单独用SQL查询总和
如果不想在PHP里累加,可以单独执行一条求和的SQL语句,注意要和查询数据的条件一致:
if (isset($_POST['date1']) && isset($_POST['date2'])) { // 先查询数据 $sqlData = "SELECT * FROM user WHERE signup_date BETWEEN ? AND ?"; $stmtData = mysqli_prepare($conn, $sqlData); mysqli_stmt_bind_param($stmtData, "ss", $_POST['date1'], $_POST['date2']); mysqli_stmt_execute($stmtData); $resultData = mysqli_stmt_get_result($stmtData); if (mysqli_num_rows($resultData) > 0) { $x = 0; while ($row = mysqli_fetch_assoc($resultData)) { $output = '<tr> <td>' . ++$x . '</td> <td>' . $row["name"] . '</td> <td>' . $row["email"] . '</td> <td>' . $row["age"] . '</td> <td>' . $row["signup_date"] . '</td> </tr>'; echo $output; } // 查询年龄总和 $sqlSum = "SELECT SUM(age) AS total_age FROM user WHERE signup_date BETWEEN ? AND ?"; $stmtSum = mysqli_prepare($conn, $sqlSum); mysqli_stmt_bind_param($stmtSum, "ss", $_POST['date1'], $_POST['date2']); mysqli_stmt_execute($stmtSum); $resultSum = mysqli_stmt_get_result($stmtSum); $sumRow = mysqli_fetch_assoc($resultSum); $totalAge = $sumRow['total_age'] ?? 0; // 输出求和行 echo '<tr> <td colspan="3" align="right"><strong>总年龄:</strong></td> <td><strong>' . $totalAge . '</strong></td> <td></td> </tr>'; } }
重要提醒
你原来的代码直接把$_POST参数拼接到SQL里,这会导致SQL注入攻击,上面的代码都改用了预处理语句,这是必须要修正的安全问题。
内容的提问来源于stack exchange,提问作者Nicole Mawungwa
相关产品推荐
相关产品推荐

