<?php // 连接到数据库 $conn = mysqli_connect("localhost", "root", "123456", "exam"); // 检查连接是否成功 if (!$conn) { die("连接失败: " . mysqli_connect_error()); } // 获取要删除行的id $id = $_GET["id"]; // 构建 SQL 删除语句 $sql = "DELETE FROM books WHERE id=$id"; // 执行 SQL 删除语句 if (mysqli_query($conn, $sql)) { echo "数据已成功删除"; } else { echo "删除数据失败: " . mysqli_error($conn); } // 关闭连接 mysqli_close($conn); ?>这段代码为什么会显示删除数据失败?
时间: 2024-02-29 16:56:46 浏览: 7
这段代码可能会显示删除数据失败的原因有以下几种:
1. 在执行 SQL 语句时出错,可能是 SQL 语句错误或者数据库连接失败。
2. 要删除的数据不存在,此时 SQL 语句也会执行成功,但是不会删除任何数据,因此会显示删除数据失败。
3. SQL 语句执行成功,但是执行的语句并没有删除任何数据,例如当 `$id` 参数为空时,SQL 语句不会执行删除操作,因此也会显示删除数据失败。
为了确定具体的原因,可以在代码中加入调试信息,例如输出 SQL 语句和要删除的数据,以及查看 SQL 执行时的错误信息。
相关问题
<?php // 连接到数据库 $conn = mysqli_connect("localhost", "root", "123456", "exam"); // 检查连接是否成功 if (!$conn) { die("连接失败: " . mysqli_connect_error()); } // 获取要删除行的id $id = $_GET["id"]; // 构建 SQL 删除语句 $sql = "DELETE FROM books WHERE id=$id"; // 执行 SQL 删除语句 if (mysqli_query($conn, $sql)) { echo "数据已成功删除"; } else { echo "删除数据失败: " . mysqli_error($conn); } // 关闭连接 mysqli_close($conn); ?>这段代码的错误在哪?
这段代码存在SQL注入漏洞,攻击者可以通过构造特定参数,对数据库进行恶意操作。建议使用参数化查询或转义用户输入的数据来避免SQL注入。具体到这段代码中,应该修改为以下形式:
```
<?php
// 连接到数据库
$conn = mysqli_connect("localhost", "root", "123456", "exam");
// 检查连接是否成功
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
// 获取要删除行的id
$id = mysqli_real_escape_string($conn, $_GET["id"]);
// 构建 SQL 删除语句
$sql = "DELETE FROM books WHERE id=$id";
// 执行 SQL 删除语句
if (mysqli_query($conn, $sql)) {
echo "数据已成功删除";
} else {
echo "删除数据失败: " . mysqli_error($conn);
}
// 关闭连接
mysqli_close($conn);
?>
```
这里使用了 `mysqli_real_escape_string` 函数来对用户输入的 `id` 参数进行转义,以避免 SQL 注入漏洞。
检查这段代码的错误并修改实现与bookshelf.php的跳转<?php //连接数据库 $servername = "127.0.0.12"; $username = "roots"; $password = "1234root"; $dbname = "zkw"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (!$conn) { die("连接失败: " . mysqli_connect_error()); } //查询图书分类 $sql = "SELECT * FROM categories"; $result = mysqli_query($conn, $sql); mysqli_close($conn); //跳转到bookshelf.php页面 header("Location: bookshelf.php"); ?> <!DOCTYPE html> <html> <head> <title>图书分类</title> </head> <body> <h2>图书分类</h2> <ul> <?php while ($row = mysqli_fetch_assoc($result)) { ?> <li><a href="books.php?category=<?php echo $row["id"]; ?>"><?php echo $row["name"]; ?></a></li> <?php } ?> </ul> </body> </html>
以下是修改后的代码:
<?php
//连接数据库
$servername = "127.0.0.12";
$username = "roots";
$password = "1234root";
$dbname = "zkw";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
//查询图书分类
$sql = "SELECT * FROM categories";
$result = mysqli_query($conn, $sql);
//关闭数据库连接
mysqli_close($conn);
//跳转到bookshelf.php页面
header("Location: bookshelf.php");
exit;
?>
<!DOCTYPE html>
<html>
<head>
<title>图书分类</title>
</head>
<body>
<h2>图书分类</h2>
<ul>
<?php while ($row = mysqli_fetch_assoc($result)) { ?>
<li><a href="books.php?category=<?php echo $row["id"]; ?>"><?php echo $row["name"]; ?></a></li>
<?php } ?>
</ul>
</body>
</html>
修改的主要内容包括:
1. 在跳转到 bookshelf.php 页面后使用 exit 终止脚本,以避免在跳转后继续执行页面代码。
2. 将关闭数据库连接的代码移动到跳转代码之前,以确保查询结果可以正常使用。
3. 将跳转代码放在顶部,以确保在输出 HTML 代码之前执行。