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);
}
}
可悲的是,这是没有问题的。但还是谢谢你。非常不好的做法是两次使用相同的变量字母。 – MLK
那么,仍然没有工作?还是你找到了解决方案? – LP154
那么......我使用了sleep()方法。虽然我真的不喜欢这个解决方案,并希望有更好的解决方案。 – MLK