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

问题描述:

我在一个较长的商店插件中创建了一个函数,它应该为数据库中每一行创建一个随机数,在“凭证代码“栏。现在我用一个固定的数字替换了for-loop条件,因为我想确保问题不会发生,因为for-loop条件。for循环中的DBAL无法正常工作

问题是for循环只对数据库有影响。

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

所以据我了解我的代码。它应该通过同一个表循环5次,并且每次更新那些“NULL”值列中的一个,同时在每个循环之后,这些“NULL”值列中的一个应该填充随机数,因此不再被选择通过这个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框架,因为这是Shopware最好的支持方式。

我的想法是这个错误有事情做与$连接变量或DBAL是不与数据库通信速度不够快

也许有人对DBAL有更多的经验,可以帮助我。

由于提前, 最大ķ

你有两个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); 
    } 
} 
+0

可悲的是,这是没有问题的。但还是谢谢你。非常不好的做法是两次使用相同的变量字母。 – MLK

+0

那么,仍然没有工作?还是你找到了解决方案? – LP154

+0

那么......我使用了sleep()方法。虽然我真的不喜欢这个解决方案,并希望有更好的解决方案。 – MLK