2014-09-03 69 views
1

我有這個while循環代碼爲PHP編寫,我不知道爲什麼循環不斷重複,所以我把一個櫃檯打破它。PHP雖然循環問題不會覆蓋變量

在調試echo的結果時,看起來我的變量$ loop_userid不會被覆蓋。

Referral is 1021 Referral is 1021 Referral is 1021 Referral is 1021 Referral is 1021 Referral is 1021 

我有一個sql記錄列表。帳戶1021,提名爲1000

這樣做的想法是

3 Accounts 

1008 > 1021 > 1000 

But my loop stuck at 1021 

我不知道爲什麼我的$ loop_userid不會與從數據庫中提取出來的新值覆蓋。

從MySQL數據庫中選擇

account_id referral 

1000 
1008  1021 
1021  1000 

如果我贊同我的SQL SELECT語句

select * from account where account_id='1008' 
select * from account where account_id='1021' 
select * from account where account_id='1021' 
select * from account where account_id='1021' 
select * from account where account_id='1021' 
select * from account where account_id='1021' 

下面是我的代碼

$payment_owe_loop = "inside"; 
//initial userid is my own userid 
$loop_userid = $UserId; 

//用戶ID是1008在這一點上

while($payment_owe_loop=="inside") 
{ 

$sql_select = "select * from account where account_id='$loop_userid'"; 
$result = mysql_query($query); 

//echo $sql_select; 

$loop_userid = ""; 
$count = mysql_num_rows($result); 

if($count>0) 
{ 
while($rowINNER = mysql_fetch_array($result)) 
{ 
$loop_userid = $rowINNER['referral']; 
$my_rebate = $rowINNER['rebate']; 
$my_cost = (100 - $my_rebate) * $total_cost * 0.01; 
}//end while fetch inner row 
}//if there rows return 

echo " Referral is " . $loop_userid; 

if($count==0) 
{ 
$payment_owe_loop = "outside"; 
} 

if($counter>4) 
{ 
$payment_owe_loop = "outside"; 
} 

$counter++; 

unset($rowINNER); 

}//end while payment loop 

問題解決。我發現,我查詢了錯誤的SQL語句

$sql_select = "select * from account where account_id='$loop_userid'"; 
$result = mysql_query($query); 

它假設爲$ sql_select中,而不是$查詢

由SQL語句所矇蔽,我錯過了檢查變量I鍵在錯誤

+0

'while($ payment_owe_loop ==「inside」)''應該是單個等號。你不應該比較,而是分配哪些是'while',而不是條件語句,就像你爲'while($ rowINNER = mysql_fetch_array($ result))'所做的那樣。 - 'if($ payment_owe_loop ==「inside」){...}'或'while($ payment_owe_loop =「inside」)' – 2014-09-03 18:41:46

+0

嗨Fred,我試圖擺脫while循環payment_owe_loop ==值當我的計數器將變量payment_owe_loop的值更改爲4以外的值時,它有效。當我添加mysql語句echo結果時,我試圖調試一個小時左右,但不知道實際上發生了什麼在我的代碼錯誤,我的loop_userid不會覆蓋,直到引用1000 – user3412075 2014-09-03 18:45:04

+3

@ Fred-ii-沒有... while循環工作的原因是,如果沒有行可以獲取,它返回FALSE它打破循環。只要給定的條件爲TRUE,繼續循環。 – HamHamJ 2014-09-03 18:47:32

回答

3

我在這裏唯一能夠理解的是,因爲你的account數據庫使用了一個字符串account_id,有些account_id的尾部空格。所以你得到你的推薦爲1008這是1021,但我不知道1021是在數據庫中,也許它被輸入爲「1021」(一些尾隨空格)

我很想知道你作爲這個查詢的結果直接在你的數據庫上(只是通過mysql客戶端直接做)

select * from account where account_id='1021'; 

這是否實際返回一行或不?如果沒有,那麼我懷疑將不得不修剪的尾隨空格。如果他們需要再修這行代碼可能要E從修改:

$sql_select = "select * from account where account_id='$loop_userid'"; 

到:

$sql_select = "select * from account where TRIM(account_id)='$loop_userid'"; 

在一個側面說明:雖然我相信這是不相關的你的問題我會考慮修改位驗證碼:

if($count>0) 
{ 
    while($rowINNER = mysql_fetch_array($result)) 
    { 
     $loop_userid = $rowINNER['referral']; 
     $my_rebate = $rowINNER['rebate']; 
     $my_cost = (100 - $my_rebate) * $total_cost * 0.01; 
    }//end while fetch inner row 
}//if there rows return 

而且至少改變:

if($count>0) 
{ 
    rowINNER = mysql_fetch_array($result) 
    $loop_userid = $rowINNER['referral']; 
    $my_rebate = $rowINNER['rebate']; 
    $my_cost = (100 - $my_rebate) * $total_cost * 0.01; 
}//if there rows return 

我假設account.account_id是一個唯一的鍵,並且你不能有超過1條記錄。 $count是(沒有這樣的account_id)或者它是。如果您有重複的account_id,那麼會導致災難性問題。