Эта цикл «В то время как сводит меня с ума» - PullRequest
1 голос
/ 17 января 2011

Я хочу просто отобразить что-то, используя цикл while с php, но он не работает.

Вот код -

<?php 

mysqli_select_db($connect,"users");

$select_title = "select title, message from messages where user = '$u' LIMIT 4 ";

$querying = mysqli_query($connect,$select_title) or die ('Whops! Something went wrong.');

$line = mysqli_fetch_assoc($querying);

    //$title = mysqli_real_escape_string($connect,trim($line['title']));

while(($rows = mysqli_fetch_assoc($querying)))
{

    echo $rows['title'];
}

?>

Теперь у меня есть два заголовка, но отображается только один.Почему так?

Ответы [ 7 ]

6 голосов
/ 17 января 2011

Вы получили один ряд здесь:

$line = mysqli_fetch_assoc($querying);

Курсор будет перемещен в следующую строку, следовательно,

while(($rows = mysqli_fetch_assoc($querying)))
{

    echo $rows['title'];
}

будет отображать только второй ряд.

Лучшее решение - просто прокомментировать эту строку:

 //$line = mysqli_fetch_assoc($querying);
1 голос
/ 17 января 2011

... потому что вы выбираете первый заголовок со строкой $line = mysqli_fetch_assoc($querying);, но никогда не повторяете его, а затем запускаете цикл, чтобы пройти остальные заголовки.

Удалите / раскомментируйте строку, и все будет в порядке.

1 голос
/ 17 января 2011

Прокомментируйте эту строку, чтобы решить вашу проблему

//$line = mysqli_fetch_assoc($querying);
1 голос
/ 17 января 2011

Удалить эту строку:

$line = mysqli_fetch_assoc($querying);
0 голосов
/ 17 января 2011

Каждый раз, когда вы звоните mysqli_fetch_assoc(), вы «берете» одну запись из набора результатов.Когда больше нет записей, mysqli_fetch_assoc() возвращает false.Это, кстати, причина, по которой вы можете использовать цикл while.

Когда вы вызывали $line = mysqli_fetch_assoc($querying);, вы взяли одну запись из набора результатов, оставив только 1 в наборе результатов.Таким образом, ваш while цикл повторяется только для этой записи.Как все остальные отметили - вам просто нужно прокомментировать эту строку.

Я также могу рекомендовать использовать mysqli_fetch_all() function , это даст вам обычный массив, который вы можете использовать, нукак обычный массив

$results = mysqli_fetch_all($querying, MYSQLI_ASSOC);
0 голосов
/ 17 января 2011

Отладка

Мой MySQL немного заржавел (давным-давно, когда я использовал SQL => Переехал в лагерь NoSQL ...), но я бы сделал следующее:

  • Сначала я бы проверил, возвращает ли запрос правильный результат, используя консоль phpmyadmin или просто консоль mysql из командной строки.

Но я полагаю, что запрос верный, потому что многие люди говорят, что

$line = mysqli_fetch_assoc($querying);

уже выбирает строку.Но все же вы могли бы использовать его для целей отладки, я думаю.

PDO

Также я хотел бы отметить, что вы должны PDO вместо mysqli (я полагаю, почти устарел),Подготовленные PDO операторы также защищают вас от SQL-инъекций и могут быть быстрее, поскольку они предварительно скомпилированы.

0 голосов
/ 17 января 2011

вы уже получаете одну запись с

$line = mysqli_fetch_assoc($querying);

, так что осталась только одна запись, пока

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