所以我有下面的代码,我尝试将其部分作为登录脚本运行,部分为另一个程序收集一些信息。我的脚本没有出现任何错误,我只是没有从第二个和第三个 mysql_fetch_array 中获取任何信息,我读到这是一个常见问题,但这应该只适用于同一个表。即便如此,我还是遵循了建议的建议并使用 mysql_data_seek 重置 $result。我还尝试使用不同的 $result 和 $row 变量,但我仍然没有从这些查询中获取任何数据。关于我如何做到这一点有什么想法吗?
$result = mysql_query("SELECT * FROM user WHERE username = '$username'");
$row = mysql_fetch_array($result);
$salt = $row['salt'];
$id = $row['id'];
$usergroup = $row['usergroupid'];
$mysql_pass = $row['password'];
$md5_pass = md5($password.$salt);
mysql_data_seek ($result, 0);
if($mysql_pass == $md5_pass)
{
$result = mysql_query("SELECT teamid FROM tmnt_members WHERE teamid = '$id'");
$row = mysql_fetch_array($result);
$team = $row['teamid'];
$captain = $row['leader'];
$cocaptain = $row['coleader'];
mysql_data_seek ($result, 0);
$result = mysql_query("SELECT * FROM tmnt_teams WHERE teamid = '$team'");
$row = mysql_fetch_array($result);
$teamname = $row['teamname'];
}
最佳答案
您在第二个查询中缺少 coleader
和 leader
字段。您的三个查询可以非常简单地写为一个。
SELECT *
FROM user u, tmnt_members m, tmnt_teams t
WHERE u.username = '$username'
AND m.teamid = u.id
AND t.teamid = m.teamid
或者,如果您希望将身份验证保留为单独的查询,您可以执行 SELECT * FROM user WHERE username = '$username'
后跟:
SELECT *
FROM tmnt_members m, tmnt_teams t
WHERE m.teamid = '$id'
AND t.teamid = m.teamid
在撰写本文时,我注意到您的第二个查询中可能存在错误。条件 teamid = '$id'
看起来很奇怪。目前,您正在获取 ID 为用户 ID 的团队。这不可能是正确的,或者如果是的话,你的数据库结构就非常非常奇怪了。我想它应该类似于 memberid = '$id'
。
另请注意,如果没有第一段中建议的更正,此查询将要求数据库获取 ID 为 $id
的团队的 ID。换句话说,如果查询正确,您可以直接使用 $id
。
此外,执行 SELECT *
并不是最佳实践;最好明确枚举您想要的所有字段。如果您更改列名称或对数据库进行其他一些修改,您的查询可能仍然有效,但可能不会执行您期望的操作。
关于PHP mysql_fetch_array 多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23667172/