我的网站上有一个好友列表,我把用户名存储在数据库中,而不是他们的全名。所以我在朋友名单里再问一个问题。。。
while($r = mysqli_fetch_array($result)) {
$username = $r['username'];
// Wanna find the real name
$sql = "SELECT * FROM users WHERE username = '$username'";
$result = mysqli_query($con, $sql);
$row = mysqli_fetch_array($result);
$fullname = $row['fullname'];
echo $fullname;
}
它工作正常,但只显示一行,而不是所有行。当我只显示用户名时,它会显示所有的行。
2条答案
按热度按时间cuxqih211#
这里有很多问题,但归根结底是执行所谓的n+1查询。您执行一个查询来获取n行,然后再执行n个查询,每行一个,以获取其他详细信息。
你可以一枪就搞定
JOIN
:这样你就可以一次获取所有的数据。值得注意的是
username
像这样的键通常会有严重的问题,因为您要么需要在一大堆级联触发条件中分层以跟踪引用完整性,要么根本就没有任何引用完整性。尝试在数据库中使用数字值作为主键,并使用username
只作为人类的标签。这里的风险是,如果有人删除了他们的帐户,而另一个人创建了一个完全相同的名字的帐户,他们就“继承”了前一个人的那些朋友。这已经出现在大型网站上,给人们带来了很多麻烦,人们实际上获得了别人放弃的内容的所有权。
puruo6ea2#
你可以重复使用
$result
从原始查询中使用。。。我刚刚将内部查询改为
$result1
您还应该查看准备好的语句,而不是内联字段值。