2010-06-10 107 views
1

我的php/mysql腳本有問題。它應該只輸出while循環一次,但我得到無限循環和無盡的頁面。PHP MYSQL無盡循環

$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 2010-06-10 11:48:35

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 2010-06-10 11:44:23

+0

@Neb如果你想檢查一個空的結果,使用'if(mysql_num_rows($ query)== 0)' – 2010-06-10 11:45:49