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

问题描述 投票:0回答:3

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

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

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。

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

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

php
3个回答
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次。


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;
              }

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'的所有价格5次(循环),随机值相同。

没有足够的信息可以确定,但我不认为这是有意义的:一方面,你除了在company = 'Bawden下有几条记录(=你创建一个循环的原因),另一方面,你的更新感觉就像是根据假设写的只有1个记录...... 你错过了桌子上的价格日期吗? priceTable的主要关键是什么?

尝试发布有关您的表格的更多技术细节(定义,数据样本),或者进一步提供帮助将会很复杂。

© www.soinside.com 2019 - 2024. All rights reserved.