2017-08-16 55 views
0

我在一個較長的商店插件中創建了一個函數,它應該爲數據庫中每一行創建一個隨機數,在「憑證代碼「欄。現在我用一個固定的數字替換了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有更多的經驗,可以幫助我。

由於提前, 最大ķ

回答

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); 
    } 
} 
+0

可悲的是,這是沒有問題的。但還是謝謝你。非常不好的做法是兩次使用相同的變量字母。 – MLK

+0

那麼,仍然沒有工作?還是你找到了解決方案? – LP154

+0

那麼......我使用了sleep()方法。雖然我真的不喜歡這個解決方案,並希望有更好的解決方案。 – MLK