for 循环内的 DBAL 无法正常工作
DBAL inside of for loop doesn't work properly
我在一个较长的商店软件插件中创建了一个函数,它应该为数据库中 "vouchercode" 列中具有 "NULL" 值的每一行创建一个随机数。现在我用固定数字替换了 for-loop 条件,因为我想确保问题不会因为 for-loop 条件而发生。
问题是,for循环只对数据库产生一次影响。
例如:我有这个 table 's_plugin_tnev'。 table 里面有 6 行。其中 4 个在凭证代码列中具有 "NULL" 作为值。
据我了解我的代码。它应该通过相同的 table 循环 5 次,并且每次更新那些 "NULL"-value 列之一,同时在每次循环之后,那些 "NULL"-value 列之一应该用随机填充编号,因此不再被此 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 最支持的方式。
我的想法是错误与 $connect 变量有关,或者 DBAL 通信速度不够快数据库。
也许有人对 DBAL 有更多经验,可以帮助我。
提前致谢,
最大 K
您有两个 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);
}
}
我在一个较长的商店软件插件中创建了一个函数,它应该为数据库中 "vouchercode" 列中具有 "NULL" 值的每一行创建一个随机数。现在我用固定数字替换了 for-loop 条件,因为我想确保问题不会因为 for-loop 条件而发生。
问题是,for循环只对数据库产生一次影响。
例如:我有这个 table 's_plugin_tnev'。 table 里面有 6 行。其中 4 个在凭证代码列中具有 "NULL" 作为值。
据我了解我的代码。它应该通过相同的 table 循环 5 次,并且每次更新那些 "NULL"-value 列之一,同时在每次循环之后,那些 "NULL"-value 列之一应该用随机填充编号,因此不再被此 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 最支持的方式。
我的想法是错误与 $connect 变量有关,或者 DBAL 通信速度不够快数据库。
也许有人对 DBAL 有更多经验,可以帮助我。
提前致谢, 最大 K
您有两个 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);
}
}