2013-06-25 3 views
0

Я пытаюсь вернуть все строки в таблице MySQL. У меня есть следующие функции:Возврат всех строк, а не только один

function listTickets() { 
    global $con; 
    $result = mysqli_query($con, "SELECT * FROM tickets"); 
    while($row = mysqli_fetch_array($result)) { 
     return array($row['subject'], $row['category'], $row['username'], $row['last'], $row['id', $row['status']); 
    } 
    mysqli_close($con); 
} 

Однако print_r(listTickets()) не возвращает все строки, только первую строку. Как я могу сделать так, чтобы он возвращал каждую строку? Я знаю, как это сделать, не используя функции и многое другое, но я хотел бы выяснить, как это сделать с помощью функции. Благодаря!

ответ

3

При использовании «возвращение», ваша функция будет возвращать сразу - в первый раз вокруг петли. Последующие пробежки по циклу отменены, как и mysqli_close.

Также: (1) вы закрываете соединение с базой данных для всех остальных (как правило, если вы открываете его, закройте его, если вы его не открываете, не закрывайте его) и (2) $ результат не финалом результат - рассмотреть возможность использования более описательной переменной

Так тогда это выглядит следующим образом:

function listTickets() 
{ 
    global $con; 
    $query = mysqli_query($con, "SELECT * FROM tickets"); 
    $result = array(); 
    while($row = mysqli_fetch_array($query)) 
    { 
     array_push($result,array($row['subject'], $row['category'], $row['username'], $row['last'], $row['id', $row['status'])); 
    } 
    return $result; 
} 

Далее, я хотел бы добавить опцию MYSQLI_NUM (или даже MYSQLI_ASSOC) в mysqli_fetch_array , и удалите код, который принимает массив, и преобразует его в почти точно такой же массив.

function listTickets() 
{ 
    global $con; 
    $query = mysqli_query($con, "SELECT * FROM tickets"); 
    $result = array(); 
    while($row = mysqli_fetch_array($query,MYSQLI_NUM)) 
    { 
     array_push($result,$row); 
    } 
    return $result; 
} 
+0

Большое спасибо за помощь! Еще один вопрос: как я могу повторить результаты. Прямо сейчас, print_r покажет все так же, как я хотел, однако, повторяя, скажем, $ ticket [1], он будет эхом только первой строки, а не каждой строки. Я предполагаю, что мне понадобится какое-то заявление. Как мне отформатировать его? – user2521909

+0

Новый вопрос :) - попробуйте 'foreach ($ result AS $ ticket) {print $ ticket [0]}', чтобы напечатать первое поле в каждом билете. –

0

как только вы используете return в функции, функция завершается, и возвращается значение после return.

Следовательно, вам нужно где-то сохранить строку базы данных, а затем в конце вернуть все сохраненные строки.

.: например

function listTickets() 
{ 
    global $con; 
    $result = mysqli_query($con, "SELECT * FROM tickets"); 

    $stack = array(); // <- the temp array 
    while($row = mysqli_fetch_array($result)) 
    { 
     // push the db result to the stack 
     array_push($stack, $row); 
    } 
    mysqli_close($con); 

    return $stack; 
} 
0

return После того, как заявление будет достигнуто, то функция будет завершена. Вам нужно будет собрать строки в какую-то коллекцию и вернуть коллекцию строк.

Надеется, что это помогает

0

return выходит из функции сразу. Накопить выход в буфере затем вернуть его:

function listTickets() 
{ 
    global $con; 
    $result = mysqli_query($con, "SELECT * FROM tickets"); 
    buffer = array(); 
    while($row = mysqli_fetch_array($result)) 
    { 
     array_merge(buffer,array($row['subject'], $row['category'], $row['username'], $row['last'], $row['id', $row['status'])); 
    } 
    mysqli_close($con); 
    return buffer; 
} 
+0

@AlexBrooks, у вас там нет неграмотного ... –