2013-10-08 2 views
0

Прошу прощения за мое ленивое название. Я надеюсь, что модератор мог бы улучшить его, чтобы база данных не заразилась.Базис базы данных возвращает только одну строку

У меня есть следующий код (forum.php);

<?php 

$res = $db->query(' 
    SELECT * 
    FROM forums_categories 
    ORDER BY category_id 
'); 

while ($row = $db->fetch_array($res)) { 
    $categories = array(
    'ID' => $row['category_id'], 
    'NAME' => $row['category_name'] 
); 

    echo '<pre>'; 
    print_r($categories); 
    echo '</pre>'; 
} 

И я получил следующую структуру базы данных;

|---------------|-------------------| 
| category_id | category_name | 
|---------------|-------------------| 
| 1   | Example 1   | 
| 2   | Example 2   | 
| 3   | Example 3   | 
| 4   | Example 4   | 
| 5   | Example 5   | 
| 6   | Example 6   | 
|---------------|-------------------| 

Но мой массив только возвращает значение 1:

Array 
(
    [ID] => 1 
    [NAME] => Example 1 
) 

Ох, и если кто-то любит, чтобы знать, как мой $db->fetch_array выглядит следующим образом:

<?php 

function fetch_array($result) 
{ 
return mysql_fetch_assoc($result); 
} 

Как я могу вернуть все строки в моем массив? Спасибо за чтение и спасибо за ответ!

+0

Напоминание: не используйте 'SELECT *' - Причина: http://stackoverflow.com/questions/321299/what-is-the-reason-not-to-use-select – Musterknabe

ответ

3

Вы перезаписать предыдущее значение $categories на каждой итерации

$categories[] = array(
    'ID' => $row['category_id'], 
    'NAME' => $row['category_name'] 
); 

Вы также можете инициализировать пустой массив

$categories = array(); 

до вашего цикла, чтобы избежать предупреждений.

+1

Мы объявляем переменные не только для предотвращения предупреждений, потому что предупреждение не является проблемой. Это говорит только о том, что у нас проблемы. –

+0

Благодарим вас за информацию. Он все еще возвращает один ряд, но я чувствую, что я рядом. –

Смежные вопросы