更新MySQL数据库时停止PHP循环

时间:2019-02-15 14:45:57

标签: php

我正在为股票市场模拟器创建一个基本的主菜单,在该菜单中,公司的价格将定期更新。为了进行测试,我需要循环播放一次,以在网站上显示五次股票价格(网站会自动更新而不刷新),并同时更新数据库。

我已经成功编写了一些代码,这些代码既可以使用当前股价更新数据库,也可以更新网站。但是,当我尝试包含一个循环时,我遇到了问题。我已经包含了一个循环进行5次迭代,但是我遇到的问题是,即使经过5次尝试,代码仍会继续进行迭代。

PHP:

<?php
  $conn = mysqli_connect("localhost", "root", "", "prices");
  if ($conn->connect_error)
  {
    die("Connection error: ". $conn->connect_error);
  }
  $result = $conn->query("SELECT `price` FROM `priceTable` WHERE `company` = 'Bawden'");
  $x = 0;
    if ($result->num_rows > 0)
    {
      while ($row = $result->fetch_assoc())
      {
        echo $row['price'];
        echo '<br><br>';
        echo $x;
        if ($x < 5)
        {
          $random = (rand(3300, 3700) / 100);
          $sql = $conn->query("UPDATE `priceTABLE` SET `price` = '$random' WHERE `company` = 'Bawden'");
          $x++;
        }
      }
    }
?>

以上代码将与Javascript代码一起显示在单独的文档中,如果需要,可以在原始帖子中发布此代码,但是我最初选择不这样做,因为我认为这是仅PHP的问题。我选择显示$ x以查看该值是否会增加。但是,运行时,$ x的值将保持为0。

我的预期结果是,在网站上,只会有五种不同的更新,而在数据库中,数据库只会被更新五次。

但是,我的实际结果是网站和数据库都在不断更新,而不是在五次之后都没有停止。

3 个答案:

答案 0 :(得分:0)

是什么让您认为循环应在5次迭代后停止?

您需要在$x<5

中添加条件while ($row = $result->fetch_assoc())

根据您的评论进行编辑

最初编写的内容类似于loop hundreds of times if need be and do something in the first 5 occurrences (starting loop 6, keep looping but do nothing)

现在您的评论的第二部分,我不确定您的意思。
我在您的代码中看到的是:

  1. 选择company = 'Bawden'的所有价格
  2. 使用所有记录上的随机值(相同的一个)将company = 'Bawden'的价格company = 'Bawden更新5次(循环)。

没有足够的信息来确定,但我认为这没有道理:一方面,您除了在priceTable下有几条记录(=您创建了循环的原因)之外,另一方面,您的更新就好像是在假设只有1条记录的情况下写的一样。
您是否从桌上错过了诸如价格日期之类的东西? User的主键是什么?

尝试发布有关表的更多技术细节(定义,数据示例),否则将很难提供进一步的帮助。

答案 1 :(得分:0)

  The else will break the first loop, the second one will stop on the first while loop.



while ($row = $result->fetch_assoc())
              {
                echo $row['price'];
                echo '<br><br>';
                echo $x;
                if ($x < 5)
                {
                  $random = (rand(3300, 3700) / 100);
                  $sql = $conn->query("UPDATE `priceTABLE` SET `price` = '$random' WHERE `company` = 'Bawden'");
                  $x++;
                }else{
    break;
    }
    break;
              }

答案 2 :(得分:0)

  

我正在尝试将update命令限制为仅5次更新。在   此刻,出于测试目的,我的数据库中只有一家公司   一口价。所以我要更新这家公司的价格五   次

如果您需要对数据库返回的每一行进行5次更新,请将if语句更改为for循环。更改此:-

 if ($x < 5)
    {
      $random = (rand(3300, 3700) / 100);
      $sql = $conn->query("UPDATE `priceTABLE` SET `price` = '$random' WHERE `company` = 'Bawden'");
      $x++;
    }

对此

for ($x = 0, $x < 5, $x++)
{
      $random = (rand(3300, 3700) / 100);
      $sql = $conn->query("UPDATE `priceTABLE` SET `price` = '$random' WHERE `company` = 'Bawden'");
}

这将完全重复该过程5次,而不依赖于一个单独的计数器(删除对$ x的其他引用)。不确定为什么要使用不同的随机值将同一条记录更新5次。