【问题标题】:Real Time Database querying using while loop使用 while 循环进行实时数据库查询
【发布时间】:2014-06-12 23:51:13
【问题描述】:

我目前正在为基于 Raspberry Pi 和 Arduino 的 Scalextric 遥测系统开发用户界面。该系统在轨道周围使用了一系列光传感器,这些传感器的输出被插入到一个mySQL数据库中。

根据这些数据,我需要显示比赛统计数据。例如,如果一辆车在赛道起点经过光传感器,则当前圈数增加一。我为此编写了以下代码:

    <?
$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 循环是在数据发生时显示数据的正确方法,还是应该使用另一种方法?

【问题讨论】:

  • 你在哪里定义$raceID?另外,由于您的switch($checkpointNumber) 中没有默认值,因此如果while ($row = $checkdb -&gt; fetch()) 不返回任何行,则$checkpointNumber 将永远不会匹配1|2,因此$currentLap 永远不会增加,所以你会有一个无休止的循环。
  • @Sean Race ID 在名为“raceStats.php”的文件中定义。我已将此文件包含在页面顶部。我不确定我可以在我的 switch 语句中使用什么作为默认值,因为检查点编号只能是一两个。当汽车绕着轨道行驶时,查询应该始终返回值。

标签: php mysql pdo while-loop


【解决方案1】:

while 循环是显示数据的正确方法吗? 应该使用另一种方法吗?

是的,但您不应该在循环中运行 execute,这样做没有意义,请将您的代码更改为

$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'];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2013-03-11
    • 2015-12-22
    • 1970-01-01
    • 2014-01-09
    相关资源
    最近更新 更多