MySQL: неопределенные индексы, даже если они были определены - PullRequest
2 голосов
/ 26 октября 2011

У меня есть довольно простой код:

$result = mysql_query("
SELECT  max(id) as id, ip, max(entry), COUNT(ip) AS count 
FROM table_name
GROUP BY ip
ORDER BY max(id) asc
");

$i = 0;

$num_rows = mysql_num_rows($result);

echo $num_rows;


while($row = mysql_fetch_row($result)) {
    $id = $row['id'];
    $entry = $row['entry'];
    $ip = $row['ip'];
    $count = $row['count'];
    $i++;
?>



<tr width="100%" align="center">
    <td><?php echo $i; ?></td>
    <td><?php echo $id; ?></td>
    <td><?php echo $entry; ?></td>
    <td><?php echo $ip; ?></td>
    <td><?php echo $count; ?></td>
    <td>
    <form style="display:inline;" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
        <input type="hidden" value="<?php echo $ip; ?>" name="ip" />
        <input type="hidden" value="<?php echo $id; ?>" name="id" />
        <input type="submit" value="Ban IP" name="submit" />
    </form>
    </td>
</tr>

<?php
}

Проблема в том, что когда я запускаю его, я получаю:

Notice: Undefined index: id
Notice: Undefined index: entry
Notice: Undefined index: ip
Notice: Undefined index: count

Но, насколько я вижу, я определил индексы в операторе SQL, и любая помощь будет полезна. Он выбирает данные, используя имена столбцов id, ip, entry и создает индекс «count» для количества ip, так почему он говорит, что он не был определен?

Ответы [ 5 ]

3 голосов
/ 26 октября 2011

Чтобы получить результирующий ряд в качестве ассоциативного массива, вы должны использовать mysql_fetch_assoc вместо mysql_fetch_row.

Также у вас нет определено entry несмотря на ваше заявление, которое у вас есть.Измените это:

SELECT max(id) as id, ip, max(entry), COUNT(ip) AS count 

На это:

SELECT max(id) as id, ip, max(entry) AS entry, COUNT(ip) AS count 
0 голосов
/ 26 октября 2011

Вам нужно mysql_fetch_assoc, mysql_fetch_row возвращает простой массив с числовыми индексами.

0 голосов
/ 26 октября 2011

Просто попробуйте вместо этого mysql_fetch_assoc.

0 голосов
/ 26 октября 2011

mysql_fetch_row возвращает перечисляемый массив.

Вы хотите mysql_fetch_array.

В качестве альтернативы вы можете получить значения по индексу столбца:

while($row = mysql_fetch_row($result)) {
    $id = $row[0];
    $ip = $row[1];
    $entry = $row[2];
    $count = $row[3];
    $i++;
}
0 голосов
/ 26 октября 2011

Вы используете mysql_fetch_row(), который возвращает данные в виде индексированного массива.Вы хотите mysql_fetch_assoc() вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...