每当我使用:while($x = mysqli_fetch_array($y))
然后echo $x
,它都会返回除第一行之外的所有内容。
表格:
论坛用户
- users.user_id 用户.用户名
- 用户.密码
- 用户.图像
论坛
- forums.forum_id forums.user_id
- forums.name
这是我的代码:
<?php
session_start();
$con = new mysqli("localhost", "root", "", "forum");
if(!isset($_SESSION["online"])==1) {
$_SESSION["offline"] = "true";
}
$username = $_SESSION["online"];
$u_query = "SELECT * FROM forum.users WHERE users.username = '".$username."'";
$u_result = $con -> query($u_query);
$u_row = mysqli_fetch_array($u_result);
if(isset($_POST["logout"])) {
session_unset();
session_destroy();
header("Location: login.php");
}
$f_search = "SELECT * FROM forum.forums WHERE user_id = '".$u_row['user_id']."'";
$f_result = $con -> query($f_search);
$f_row = mysqli_fetch_array($f_result);
?>
<html>
<head>
<title>Home</title>
<charset = "UTF-8">
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="header">
<div id="user">
<img src="<?php echo $u_row['image']; ?>" id="user-image">
<?php echo $u_row["username"]; ?>
<form method="post">
<input type="submit" name="logout" value="sign out">
</form>
</div>
</div>
<?php if(mysqli_num_rows($f_result)>= 0) { ?>
<div>
<div>Your forums:</div><table><tr>
<?php while($f_row = mysqli_fetch_array($f_result)) { ?>
<td><a href="forum.php?forumid=<?php echo $f_row['forum_id']; ?>"><?php echo $f_row["name"]; ?></a></td>
<td></td>
<?php } ?>
</tr></table>
</div>
<?php } ?>
</body>
</html>
为什么它不返回第一行?
调用 mysqli_fetch_array
获取行并推进游标。所以你的第一个
$f_row = mysqli_fetch_array($f_result);
有第一行。然后
while($f_row = mysqli_fetch_array($f_result)) {
前进到第二行,并循环遍历所有其他结果。
因此,要么在while
之外删除$f_row = mysqli_fetch_array($f_result);
,要么在while
之前输出内容。看起来您没有使用该数组,所以我只是将其删除。
此外:
$username = $_SESSION["online"];
$u_query = "SELECT * FROM forum.users WHERE users.username = '".$username."'";
对 SQL 注入开放。应使用预准备语句并参数化查询。http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
删除$f_row = mysqli_fetch_array($f_result);
通过在脚本的早期自行调用它,您将指针 +1 前进。然后在你的while($f_row = mysqli_fetch_array($f_result))
中,你实际上是从第二行开始的。
$f_search = "SELECT * FROM forum.forums WHERE user_id = '".$u_row['user_id']."'";
$f_result = $con -> query($f_search);
$f_row = mysqli_fetch_array($f_result); // <---- remove this line