for循环中的DBAL无法正常工作

时间:2017-08-16 11:32:20

标签: php sql doctrine dbal shopware

我在一个较长的插件中为shopware创建了一个函数,该函数应该为数据库中“vouchercode”列中具有“NULL”值的每一行创建一个随机数。现在我用固定数字替换了for循环条件,因为我想确保由于for循环条件不会发生问题。

问题是,for循环只对数据库产生一次影响。

例如:我有这个表's_plugin_tnev'。那张桌子里面有6排。其中4个在凭证代码列内部具有“NULL”值。

据我了解我的代码。它应该在同一个表中循环5次,每次更新其中一个“NULL”值列,同时在每个循环之后,其中一个“NULL”值列应该用随机数填充,因此不再是SELECTed,也不再是SELECT由此for循环更新。

虽然如前所述,这种情况不会发生。 for循环显然只运行一次。

以下是我的代码段:

public function generateCode()
{
  //Repeat action 5 times
  for($i = 0; $i <= 4; $i++) 
  {
    $rand   = 0;
    //Creates 16 times a number and add it to the var
    for ($i = 0; $i<15; $i++)
        {
            $rand .= mt_rand(0,9);
        }
        //On Checkoutcomplete add $rand to database table
        $addInt    = "UPDATE s_plugin_tnev SET vouchercode = $rand 
                      WHERE vouchercode IS NULL
                      LIMIT 1";
        $connect = Shopware()->Db()->query($addInt);
  }
}

正如您所见,我使用的是DBAL Framework,因为这是Shopware最好的支持方式。

我的想法是错误与 $ connect 变量有关,或者DBAL 与数据库的通信速度不够

也许某人对DBAL有更多经验并且可以帮助我。

提前致谢, Max K

1 个答案:

答案 0 :(得分:0)

你有两个for循环$i,所以在第一次迭代时,$i值为15,第一个循环只执行一次。

请改为尝试:

public function generateCode()
{
  //Repeat action 5 times
  for($i = 0; $i <= 4; $i++) 
  {
    $rand   = 0;
    //Creates 16 times a number and add it to the var
    for ($j = 0; $j<15; $j++) // $j NOT $i <---
    {
        $rand .= mt_rand(0,9);
    }
    //On Checkoutcomplete add $rand to database table
    $addInt    = "UPDATE s_plugin_tnev SET vouchercode = $rand 
                  WHERE vouchercode IS NULL
                  LIMIT 1";
    $connect = Shopware()->Db()->query($addInt);
  }
}