чому я не можу відобразити мої записи в PHP MySQL?

У моїй базі даних є записи, але я не можу їх відображати. Може хтось перевірити мої коди, будь ласка. Я просто аматорський веб-розробник. Дякуємо за будь-яку допомогу.

<?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
($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 , який є Помилка . Якщо з запиту видалити WHERE group = '$ g_id' , всі мої записи відображатимуться випадковим чином, але я хотів би показати свої записи (учасники) за групами.

0
попередження , ваш код може бути вразливим для SQL ін'єкційних атак.
додано Автор Daniel A. White, джерело
Крім того, ви отримаєте кращу продуктивність при приєднанні.
додано Автор Daniel A. White, джерело
Крім того, ви отримаєте кращу продуктивність при приєднанні.
додано Автор Daniel A. White, джерело
Не забудьте виправити: echo "<tr> <td>". $ M_name. " & zwnj;/td> </tr> ";
додано Автор Sergio, джерело
Не забудьте виправити: echo "<tr> <td>". $ M_name. " & zwnj;/td> </tr> ";
додано Автор Sergio, джерело
Використовуйте mysql_error() , щоб отримати помилку із запиту SQL; додайте це у ваш випадок, так що ви можете побачити помилку
додано Автор Alex Coleman, джерело
Будь ласка, не використовуйте застарілі функції mysql_ * .
додано Автор Voitcus, джерело

7 Відповіді

Вам потрібно уникнути зарезервованих слів у MySQL , наприклад група із зворотним зв'язком

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

Це простіше і збільшить продуктивність, оскільки вам не потрібно виконувати багато запитів, а лише один.

Також не використовуйте функції mysql_ * у новому коді . Вони більше не підтримуються та офіційно застаріли . Дізнайтеся про Підготовлені звіти та скористайтеся PDO або MySQLi . Див. цю статтю для швидкого огляду, як це зробити, і чому це так важливо.

3
додано
Я не знав, що "група" є зарезервованими словами в MySQL. Дякую у людині за вказівку, що. це вирішило мою проблему.
додано Автор user1957878, джерело

Вам потрібно уникнути зарезервованих слів у MySQL , наприклад група із зворотним зв'язком

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

Це простіше і збільшить продуктивність, оскільки вам не потрібно виконувати багато запитів, а лише один.

Також не використовуйте функції mysql_ * у новому коді . Вони більше не підтримуються та офіційно застаріли . Дізнайтеся про Підготовлені звіти та скористайтеся PDO або MySQLi . Див. цю статтю для швидкого огляду, як це зробити, і чому це так важливо.

3
додано
Я не знав, що "група" є зарезервованими словами в MySQL. Дякую у людині за вказівку, що. це вирішило мою проблему.
додано Автор user1957878, джерело

Вам потрібно уникнути зарезервованих слів у MySQL , наприклад група із зворотним зв'язком

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

Це простіше і збільшить продуктивність, оскільки вам не потрібно виконувати багато запитів, а лише один.

Також не використовуйте функції mysql_ * у новому коді . Вони більше не підтримуються та офіційно застаріли . Дізнайтеся про Підготовлені звіти та скористайтеся PDO або MySQLi . Див. цю статтю для швидкого огляду, як це зробити, і чому це так важливо.

3
додано
Я не знав, що "група" є зарезервованими словами в MySQL. Дякую у людині за вказівку, що. це вирішило мою проблему.
додано Автор user1957878, джерело

Ви повинні об'єднати ваші змінні. Спробуйте це:

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

І

echo "<tr><td>".$m_name."
(".$g_name.")</td><td>".$m_email."</td></tr>";

0
додано

Спробуйте як

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

або просто

$members=mysql_query("SELECT * FROM members WHERE `group` = '$g_id'");
0
додано
Не може зашкодити, хоча у випадку, якщо він не є цілим, ідентифікатор в цілому є цілим числом, але, здається, у його коді немає нічого, що змушує його
додано Автор Alex Coleman, джерело
Не забувайте про апострафи у вашому другому прикладі навколо $ g_id
додано Автор Alex Coleman, джерело
Чому ви downvoted ..... будь-якої причини .. ??
додано Автор Gautam3164, джерело
Ok @AlexColeman Я додав, що також ... thanku за цінні пропозиції
додано Автор Gautam3164, джерело
Оскільки це цілочисельне значення, нам не потрібно ставити апостахи для цього
додано Автор Gautam3164, джерело

Спробуйте як

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

або просто

$members=mysql_query("SELECT * FROM members WHERE `group` = '$g_id'");
0
додано
Не може зашкодити, хоча у випадку, якщо він не є цілим, ідентифікатор в цілому є цілим числом, але, здається, у його коді немає нічого, що змушує його
додано Автор Alex Coleman, джерело
Не забувайте про апострафи у вашому другому прикладі навколо $ g_id
додано Автор Alex Coleman, джерело
Ok @AlexColeman Я додав, що також ... thanku за цінні пропозиції
додано Автор Gautam3164, джерело
Чому ви downvoted ..... будь-якої причини .. ??
додано Автор Gautam3164, джерело
Оскільки це цілочисельне значення, нам не потрібно ставити апостахи для цього
додано Автор Gautam3164, джерело

Спробуйте як

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

або просто

$members=mysql_query("SELECT * FROM members WHERE `group` = '$g_id'");
0
додано
Не може зашкодити, хоча у випадку, якщо він не є цілим, ідентифікатор в цілому є цілим числом, але, здається, у його коді немає нічого, що змушує його
додано Автор Alex Coleman, джерело
Не забувайте про апострафи у вашому другому прикладі навколо $ g_id
додано Автор Alex Coleman, джерело
Ok @AlexColeman Я додав, що також ... thanku за цінні пропозиції
додано Автор Gautam3164, джерело
Чому ви downvoted ..... будь-якої причини .. ??
додано Автор Gautam3164, джерело
Оскільки це цілочисельне значення, нам не потрібно ставити апостахи для цього
додано Автор Gautam3164, джерело
Ukrainian PHP comunity
Ukrainian PHP comunity
885 учасників

dev-ua/php