2014-04-27 64 views
0

我目前正在開發基於Raspberry Pi和Arduino的Scalextric遙測系統的用戶界面。該系統在軌道周圍使用一系列光傳感器,這些傳感器的輸出被插入到mySQL數據庫中。實時數據庫使用while循環查詢

從這些數據我需要顯示比賽統計。例如,如果一輛汽車在軌道起點通過光線傳感器,則當前圈數增加1。我已經寫了下面的代碼是:

<? 
$currentLap = 1; 
$checkpointTime = ''; 
$checkpointNumber = ''; 
$checkdb = $db -> prepare ("SELECT * FROM laps WHERE `race_id` = :raceID"); 
$checkdb -> bindParam (':raceID', $raceID); 

while ($currentLap <= $totallaps) { 

    $checkdb -> execute(); 
    while ($row = $checkdb -> fetch()) { 

     $checkpointTime = $row['checkpoint_time']; 
     $checkpointNumber = $row['checkpoint_number']; 
    } 

switch($checkpointNumber) { 
     case 1: 
     $currentLap = $currentLap + 1; 
     break; 

     case 2: 
     //Lane 2 
     $currentLap = $currentLap + 1; 
     break; 
    } 

} 

?> 

我然後顯示與當前圈:

<? echo $currentLap; ?> 

然而,當我訪問包含此代碼的網頁,無任何顯示的頁面似乎連續加載。

是一個while循環顯示數據的正確方法,因爲它發生或有另一種方法應該使用?

+0

你在哪裏定義'$ raceID'?另外,因爲你的'switch($ checkpointNumber)'中沒有缺省值,所以比'while($ row = $ checkdb - > fetch())'不返回任何行','$ checkpointNumber'永遠不會匹配'1' |'2',所以'$ currentLap'永遠不會增加,所以你將有一個無止境的循環。 – Sean

+0

@Sean Race ID在一個名爲「raceStats.php」的文件中定義。我已經將該文件包含在頁面的頂部。 我不確定我的switch語句中可以使用什麼默認值,因爲檢查點編號只能是一個或兩個。隨着汽車駛過賽道,查詢應始終返回值。 –

回答

0

是while循環顯示數據的正確方法,或者是 還有另一種方法應該使用?

是的,但你不應該運行在一個循環中執行,有這樣做沒有意義的,改變你的代碼

$checkdb = $db->prepare ("SELECT * FROM laps WHERE `race_id` = :raceID"); 
$checkdb ->bindParam(':raceID', $raceID); 
$checkdb -> execute(); 
while ($row = $checkdb -> fetch()) { 
    $checkpointTime = $row['checkpoint_time']; 
    $checkpointNumber = $row['checkpoint_number']; 
}