php
  • mysql
  • loops
  • 2010-06-10 2 views 1 likes 
    1

    У меня проблема с моим скриптом php/mysql. Он должен выводить цикл while один раз, но я получаю неограниченные циклы и бесконечную страницу.PHP MYSQL Endless Loop

    $query = mysql_query("SELECT * FROM users WHERE username ='".base64_encode($_SESSION['username'])."' LIMIT 1"); 
    $result = mysql_fetch_array($query); 
        if(empty($result)){ 
         echo "No user... Error"; 
        }else{ 
        while($row = $result){ 
        ?> 
    <a href="index.php?user=<?=$row['id']?>"><?=base64_decode($row['username'])?></a> | <a href="javascript:void(0);" id="logout">Logout</a> 
        <?php 
        } 
    } 
    

    Я попробовал подобный сценарий с теми же линиями, и она прекрасно работает

    $result = mysql_fetch_array($query); 
        if(empty($result)){ 
         echo "No user... Error"; 
        }else{ 
        while($row = $result){ 
         //Something 
        } 
    } 
    

    loop http://img249.imageshack.us/img249/70/endlessloop.png

    ответ

    2

    Посмотрите:

    http://php.net/manual/en/function.mysql-fetch-array.php

    Он имеет в примере :

    $result = mysql_query("SELECT id, name FROM mytable"); 
    
    while ($row = mysql_fetch_array($result)) { 
        printf("ID: %s Name: %s", $row[0], $row[1]); 
    } 
    

    mysql_fetch_array получает массив следующей строки ИЛИ false, если его не осталось.

    $ строки = $ результат будет создать бесконечный цикл, когда $ результата это то, что не отбрасывает к ложным

    ДОПОЛНИТЕЛЬНО

    вы можете использовать mysql_num_rows [ http://php.net/manual/en/function.mysql-num-rows.php ], чтобы проверить, если ноль результаты были возвращены:

    $result = mysql_query("SELECT id, name FROM mytable"); 
    
    if(mysql_num_rows($result) { 
        while ($row = mysql_fetch_array($result)) { 
         printf("ID: %s Name: %s", $row[0], $row[1]); 
        } 
    } else { 
        // NO ROWS RETURNED 
    } 
    
    +0

    Спасибо, второй пример принял – nebkat

    0

    $row = $result не сравнение, но назначение, и всегда будет верным.

    Вам нужно поставить mysql_fetch_array в ваш цикл while.

    while($row = mysql_fetch_array($query)){ 
        ?> 
    <a href="index.php?user=<?=$row['id']?>"><?=base64_decode($row['username'])?></a> | <a href="javascript:void(0);" id="logout">Logout</a> 
        <?php 
        } 
    
    +0

    Но тогда я должен сделать два mysql_fetch_array ($ запроса), если я хочу, чтобы сделать чек на пустой запрос? – nebkat

    +0

    @Neb, если вы хотите проверить пустой результат, используйте 'if (mysql_num_rows ($ query) == 0)' –

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