MySQL删除不存在ID仍提示已删除,需实现ID存在性判断功能
解决删除员工时ID不存在的提示问题
先明确你代码里的几个核心问题:
mysqli_affected_rows()的参数传错了,它需要接收数据库连接对象$con,而非查询结果$result- 判断逻辑错误:删除存在的ID时,影响行数为1(ID是主键唯一),而非大于1;ID不存在时影响行数为0,此时应提示ID不存在,而非输出SQL错误
- 存在SQL注入风险,直接拼接用户输入到SQL语句中非常危险
修正后的PHP代码
<?php if(isset($_POST['removeemployees'])) { $error = ""; $employeeID = isset($_POST['employeeID']) ? trim($_POST['employeeID']) : ""; if(empty($employeeID)) { $error .= "员工ID不能为空"; } if($error == "") { // 使用预处理语句防止SQL注入 $sql = "DELETE FROM employees WHERE ID = ?"; $stmt = mysqli_prepare($con, $sql); mysqli_stmt_bind_param($stmt, "i", $employeeID); // "i"表示参数为整数类型 mysqli_stmt_execute($stmt); $affectedRows = mysqli_stmt_affected_rows($stmt); if($affectedRows == 1) { echo "记录已成功删除"; } elseif($affectedRows == 0) { echo "该员工ID不存在于数据库中"; } else { echo "删除记录出错: " . mysqli_error($con); } mysqli_stmt_close($stmt); } else { echo $error; } } ?>
HTML代码(无需修改)
<div class="removeemployee"> <h3> 删除员工 </h3> <p>员工ID</p> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST"> <input type="text" name="employeeID"><br> <br><input type="submit" name="removeemployees" value="提交信息"> </form> </div>
关键修改说明
- 修复影响行数判断:改用
mysqli_stmt_affected_rows($stmt)获取预处理语句的影响行数,参数为预处理语句对象,能准确拿到删除操作的实际影响记录数 - 新增ID不存在分支:当影响行数为0时,明确提示用户ID不存在,区分开真实的SQL错误
- 防SQL注入处理:通过预处理语句绑定参数,避免直接拼接用户输入到SQL中,提升代码安全性
- 简化ID获取逻辑:用三元运算符替代冗余的if-else判断,代码更简洁
你之前考虑的“从MySQL获取所有数据再对比输入ID”完全没必要,会浪费数据库资源,直接通过DELETE操作的影响行数就能高效判断ID是否存在。
内容的提问来源于stack exchange,提问作者Dit
相关产品推荐
相关产品推荐

