PHP使用mysqli在同一页面删除数据失败求助(附代码)
解决PHP无法从数据库删除数据的问题
看你的代码,目前只实现了部门列表展示和删除链接的生成,但完全缺少处理删除请求的核心逻辑,还有几个细节错误需要修正。我来帮你一步步解决:
1. 先补上删除请求的处理逻辑
当用户点击带?id=xxx的删除链接时,你的脚本需要检测这个参数,然后执行对应的删除操作。这里一定要用预处理语句,避免SQL注入风险,这是后端开发的安全基本要求。
2. 修正$_PHP_SELF的拼写错误
你写的$_PHP_SELF是错误的,正确的全局变量是$_SERVER['PHP_SELF'],而且要用htmlspecialchars()转义,防止XSS攻击。
3. 完整的修正代码
<?php include 'config.php'; // 先处理删除请求 if(isset($_GET['id']) && is_numeric($_GET['id'])) { $id = $_GET['id']; // 使用预处理语句执行删除,避免SQL注入 $stmt = $conn->prepare("DELETE FROM department WHERE id = ?"); $stmt->bind_param("i", $id); // "i"表示参数为整数类型 if($stmt->execute()) { echo "<p style='color:green; margin:10px 0;'>部门删除成功!</p>"; } else { echo "<p style='color:red; margin:10px 0;'>删除失败:" . $stmt->error . "</p>"; } $stmt->close(); } ?> <form action='<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>' method='GET'> <table border="1" cellpadding="8" cellspacing="0"> <tbody> <?php $sql = "SELECT * from department"; $result = $conn->query($sql); if($result->num_rows > 0 ) { while ($row = $result->fetch_assoc()){ echo "<tr> <td>" . $row["id"] . "</td> <td><b>" . $row["department_name"] . "</b></td> <td> <a href='?id=" . $row["id"] . "' onclick='return confirm(\"确定要删除这个部门吗?\")'> <input type='button' value='删除'> </a> </td> </tr>"; } } else { echo "<tr><td colspan='3' align='center'>暂无部门数据</td></tr>"; } $conn->close(); ?> </tbody> </table> </form>
关键细节说明
- 参数校验:用
isset($_GET['id']) && is_numeric($_GET['id'])确保请求参数合法,防止非法请求触发错误。 - 预处理语句:通过
bind_param绑定参数类型,彻底避免SQL注入风险,这比直接拼接SQL安全得多。 - 误删防护:添加
onclick确认提示,防止用户不小心点错删除按钮。 - 错误反馈:执行删除后给出明确的成功/失败提示,方便你排查问题。
- 资源释放:用完数据库连接和预处理语句后及时关闭,避免资源浪费。
额外排查点(如果还是无法删除)
如果修改后依然删不了数据,你可以检查这些地方:
- 确认
config.php里的数据库账号拥有DELETE权限,连接信息正确。 - 检查
department表的id字段是否是主键,且类型为整数(和代码里绑定的"i"类型匹配)。 - 开启PHP错误提示:在代码开头加上
error_reporting(E_ALL); ini_set('display_errors', 1);,查看是否有隐藏的错误信息。
内容的提问来源于stack exchange,提问作者Rahul Kumar Sharma
相关产品推荐
相关产品推荐

