Как выполнить цикл запроса mysql с помощью php

Я попытался использовать эту функцию

$conn = db_connect(); while ($newsfeed = $conn->query("select info, username, time from newsfeed ORDER BY time DESC LIMIT 10")) { (...) echo "<p>User $newsfeed_username just registerted ".$minutes." min ago </p><br>"; 

но он показывает только последнюю строку снова и снова. Я хочу перебрать все запросы из

 select info, username, time from newsfeed ORDER BY time DESC LIMIT 10 

в порядке убывания.

Вот базовый шаблон для такого рода вещей, используя встроенные php-функции (предполагая старый стиль mysql, но похожий с использованием других баз данных, или библиотек более высокого уровня). В этом примере ошибки обрабатываются путем исключения исключений, но это всего лишь один из способов сделать это.

  1. Подключение к базе данных
  2. Убедитесь, что соединение выполнено успешно.
  3. Запустить запрос
  4. Убедитесь, что запрос по какой-то причине не сработал (как правило, синтаксическая ошибка SQL). Если это не удалось, узнайте, почему и обрабатывайте эту ошибку
  5. Убедитесь, что запрос возвратил хотя бы одну строку (нулевые строки обычно являются особым случаем)
  6. Перебирайте возвращаемые строки, делая все, что вам нужно.

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

Пример кода:

 <?PHP //try to connect to your database. $conn = mysql_connect(...); //handle errors if connection failed. if (! $conn){ throw new Db_Connect_Error(..); } // (try to) run your query. $resultset = mysql_query('SELECT ...'); //handle errors if query failed. mysql_error() will give you some handy hints. if (! $resultset){ // probably a syntax error in your SQL, // but could be some other error throw new Db_Query_Exception("DB Error: " . mysql_error()); } //so now we know we have a valid resultset //zero-length results are usually aa special case if (mysql_num_rows($resultset) == 0){ //do something sensible, like tell the user no records match, etc.... }else{ // our query returned at least one result. loop over results and do stuff. while($row = mysql_fetch_assoc($resultset)){ //do something with the contents of $row } } 

Сначала вы не хотите зацикливать запросы. Вы хотите просмотреть записи, которые будут возвращены.

Во-вторых, вы можете это сделать:

 $conn = db_connect(); $query = mysql_query("SELECT info, username, time FROM newsfeed ORDER BY time DESC LIMIT 10"); while(($row = mysql_fetch_assoc($query)) != NULL) { echo "<p>User {$row['username']} just registered {$minutes} min ago</p><br />"; } 

NB! Предполагая, что это db_connect () делает соединение mysql.

Перед входом в цикл вам нужно сохранить результат $conn-query() в переменной. Прямо сейчас вы выполняете запрос снова и снова с каждой итерацией цикла, которая всегда даст вам первый результат.

пример

 $conn = db_connect(); $result = $conn->query("select info, username, time from newsfeed ORDER BY time DESC LIMIT 10"); foreach ($result as $newsfeed) { (...) echo "<p>User $newsfeed_username just registerted ".$minutes." min ago </p><br>";