我的数据库中有记录但我无法显示它们。请有人检查我的密码。我只是一个业余的Web开发人员。谢谢你的帮助。
<?php
$groups=mysql_query("SELECT * FROM groups ORDER BY id ASC");
$g_res=mysql_affected_rows();
if($g_res>0)
{
while($row=mysql_fetch_array($groups))
{
$g_id=$row['id'];
$g_name=$row['g_name'];
$members=mysql_query("SELECT * FROM members WHERE group='$g_id'");
$m_res=mysql_affected_rows();
if($m_res>0)
{
while($row2=mysql_fetch_array($members))
{
$m_id=$row2['id'];
$m_name=$row2['m_name'];
$m_email=$row2['m_email'];
echo "<tr><td>$m_name<br/>($g_name)</td><td>$m_email</td></tr>";
}
}
else
{
echo "<tr><td colspan=2>Nothing to display</td></tr>";
}
}
}
else
{
echo "<tr><td colspan=2>Error</td></tr>";
}
?>
使用此代码,我得到else
结果Error
。如果我从查询中删除WHERE group='$g_id'
,我的所有记录都会随机显示,但我想按组显示我的记录(成员)。
答案 0 :(得分:3)
您需要使用反引号{/ 1>来reserved words in MySQL转义group
SELECT * FROM members WHERE `group` = '$g_id'
^-----^-------------here
您加入数据时也可以省去内部循环
select g.id as gid, g.g_name, m.id as mid, m.m_name, m.m_email
from groups g
inner join members m on g.id = m.group
order by g.id asc
这更容易,并且会提高性能,因为您不需要执行大量查询,只需要执行一次。
另请don't use mysql_* functions in new code。 它们不再被维护,而是officially deprecated。 请改为了解准备好的陈述,并使用PDO或MySQLi。请参阅this article以快速了解如何操作以及它为何如此重要。
答案 1 :(得分:0)
尝试
$members=mysql_query("SELECT * FROM members WHERE `group` = '".$g_id."');
或只是
$members=mysql_query("SELECT * FROM members WHERE `group` = '$g_id'");
答案 2 :(得分:0)
您必须连接变量。 试试这个:
$members=mysql_query("SELECT * FROM members WHERE `group`='".$g_id."'");
和
echo "<tr><td>".$m_name."<br/>(".$g_name.")</td><td>".$m_email."</td></tr>";