0

データベースにレコードがありますが、表示できません。誰か私のコードをチェックしてください。私はただのアマチュア 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'と、すべてのレコードがランダムに表示されますが、レコード (メンバー) をグループ別に表示したいと考えています。

4

3 に答える 3

3

バッククォートのように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

これは、多くのクエリを実行する必要がなく、1 つだけ実行する必要があるため、より簡単でパフォーマンスが向上します。

また、新しいコードで mysql_* 関数を使用しないでください。それらはもはや保守されておらず、公式に非推奨です。代わりにプリペアド ステートメントについて学び、 PDOまたはMySQLiを使用してください。それを行う方法と、なぜそれが重要なのかについての簡単な概要については、この記事を参照してください。

于 2013-06-24T11:55:36.023 に答える
0

のようにしてみてください

$members=mysql_query("SELECT * FROM members WHERE `group` = '".$g_id."');

または単に

$members=mysql_query("SELECT * FROM members WHERE `group` = '$g_id'");
于 2013-06-24T11:55:48.147 に答える
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>";

于 2013-06-24T11:56:02.783 に答える