这语句// 将查询结果转换为 PHP 数组 $rows = mysqli_fetch_all($result, MYSQLI_ASSOC); // 获取当前记录的索引 $current_index = array_keys($rows)[0];有什么问题
时间: 2024-04-01 13:33:48 浏览: 115
这段代码有潜在的问题:
1. `array_keys($rows)` 返回的是一个数组,如果 `$rows` 是空数组,那么 `array_keys($rows)[0]` 会导致 PHP 报错。
2. 如果查询结果不包含任何记录,那么 `$current_index` 的值会是 `NULL`,需要在代码中进行判断和处理。
解决方法:
1. 在使用 `array_keys` 之前,需要先判断 `$rows` 是否为空数组。
2. 在获取 `$current_index` 之后,需要进行判断 `$current_index` 是否为 `NULL`,如果是则进行处理。
相关问题
// 执行当前语句 $query = "SELECT * FROM my_table WHERE id = 123"; $result = mysqli_query($conn, $query); // 获取当前行数据 $row = mysqli_fetch_assoc($result); // 获取前一行数据 mysqli_data_seek($result, mysqli_num_rows($result) - 2); $prev_row = mysqli_fetch_assoc($result); // 获取后一行数据 mysqli_data_seek($result, mysqli_num_rows($result)); $next_row = mysqli_fetch_assoc($result);中的 -2 是什么意思?
`-2` 表示将结果集的指针移到当前行的前一行。因为在当前行执行 `fetch_assoc()` 函数时,结果集的指针已经自动向下移动了一行,所以要获取当前行的前一行,需要将指针向上移动两行。
具体来说,`mysqli_num_rows()` 函数返回结果集中的行数,然后 `-2` 就是将结果集的指针向上移动两行,使其指向当前行的前一行。
检查这段代码的错误并修改实现与book.php的跳转<?php header("Location: book.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()); } //查询图书 $id = $_GET["id"]; $sql = "SELECT * FROM books WHERE id=$id"; $result = mysqli_query($conn, $sql); $row = mysqli_fetch_assoc($result); //检查用户是否登录 session_start(); if (!isset($_SESSION["username"])) { $bookshelf_text = "登录后可以添加到书架"; } else { $username = $_SESSION["username"]; $sql = "SELECT * FROM bookshelf WHERE username='$username' AND book_id=$id"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { $bookshelf_text = "从书架中移除"; } else { $bookshelf_text = "添加到书架"; } } mysqli_close($conn); ?> <!DOCTYPE html> <html> <head> <title><?php echo $row["name"]; ?></title> </head> <body> <h2><?php echo $row["name"]; ?></h2> <p><?php echo $row["description"]; ?></p> <a href="bookshelf.php?action=add&id=<?php echo $id; ?>"><?php echo $bookshelf_text; ?></a> </body> </html>
在代码中,跳转的语句应该放在HTML代码之前,而不是之后。因此,应该将跳转语句移到HTML代码之前,如下所示:
```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());
}
//查询图书
$id = $_GET["id"];
$sql = "SELECT * FROM books WHERE id=$id";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
//检查用户是否登录
session_start();
if (!isset($_SESSION["username"])) {
$bookshelf_text = "登录后可以添加到书架";
} else {
$username = $_SESSION["username"];
$sql = "SELECT * FROM bookshelf WHERE username='$username' AND book_id=$id";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
$bookshelf_text = "从书架中移除";
} else {
$bookshelf_text = "添加到书架";
}
}
mysqli_close($conn);
//跳转到book.php页面
header("Location: book.php");
exit();
?>
<!DOCTYPE html>
<html>
<head>
<title><?php echo $row["name"]; ?></title>
</head>
<body>
<h2><?php echo $row["name"]; ?></h2>
<p><?php echo $row["description"]; ?></p>
<a href="bookshelf.php?action=add&id=<?php echo $id; ?>"><?php echo $bookshelf_text; ?></a>
</body>
</html>
```
阅读全文