Как я могу пройти через запрос MySQL с PHP - PullRequest
2 голосов
/ 29 июня 2010

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

        $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

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

Ответы [ 3 ]

8 голосов
/ 29 июня 2010

Вот базовый шаблон для такого рода вещей, использующий встроенные функции 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 a a 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
    }
}
3 голосов
/ 29 июня 2010

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

Во-вторых, вы можете сделать это следующим образом:

$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 соединение.

1 голос
/ 29 июня 2010

Вам нужно сохранить результат $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>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...