如何在for循环中更新数据库?

时间:2017-01-15 18:23:44

标签: php

这似乎应该是如此明显,但它让我发疯!我所拥有的是一个for循环,它输出一个数字(在这种情况下为10)的随机卡,并将生成的列表更新到数据库中,但由于某种原因,我只能让它更新最后生成的卡。我做错了什么?

仅供参考,$ card在admin / random.php中声明(它会随机抽出一个随机数字,所以在这种情况下它会拉出“testdeck01”或“testdeck12”等)

$select=mysqli_query($connect, "SELECT * FROM `members` WHERE name='name'");
while($row=mysqli_fetch_assoc($select)) {
$new=$row['new'];
for($i=1; $i<=10; $i++) {
    include ("admin/random.php");
    $cards=$card.", ";
    echo $cards;
    $newcards=$new.$cards;
        $update = "UPDATE `members` SET new='$newcards' WHERE name='name'";
        if (mysqli_query($connect, $update)) {
    }       
}
echo "<br><br>".$update;
}

当我回复$ cards时,我得到了我想在数据库中看到的内容 - “testdeck02,testdeck09,testdeck04,testdeck15,”......等等

所以我尝试将列“new”设置为$ cards,但它只将最后一张卡添加到数据库中,所以当我尝试获取数据库值并通过创建$ newcards添加每张卡时,但我仍然只得到最终价值。我做错了什么?

这是我得到的当前输出:

testdeck14, testdeck07, testdeck10, testdeck14, testdeck09, testdeck14, testdeck10, testdeck08, testdeck03, testdeck14, 

UPDATE `members` SET new='testdeck14, ' WHERE name='name'

我预计它看起来更像是这样:

testdeck14, testdeck07, testdeck10, testdeck14, testdeck09, testdeck14, testdeck10, testdeck08, testdeck03, testdeck14, 

UPDATE `members` SET new='testdeck14, testdeck07, testdeck10, testdeck14, testdeck09, testdeck14, testdeck10, testdeck08, testdeck03, testdeck14, ' WHERE name='name'

如果我要刷新页面,这就是我得到的:

testdeck11, testdeck05, testdeck05, testdeck06, testdeck09, testdeck02, testdeck03, testdeck07, testdeck08, testdeck15, 

UPDATE `members` SET new='testdeck14, testdeck15, ' WHERE name='name'

1 个答案:

答案 0 :(得分:2)

因此,您真正想要做的是使用单个值更新单个数据库行。因此,您不希望在循环中发生$cards

  

此外,您的输出在屏幕上看起来是正确的,但实际上是10   将打印件分隔到屏幕上。您的$cards变量永远不会包含   所有的文字一下子。这就是为什么数据库只能获得   最后的价值!

所以,让我们使用$cards = $cards . $card . ', ';变量存储所有卡片的整个列表,如下所示:

$cards .= $card . ', ';或更短的语法$cards = ''; // will contain comma separated list for ($i = 1; $i <= 10; $i++) { include("admin/random.php"); $cards .= $card . ", "; // builds list } $newcards = $new . $cards; $update = "UPDATE `members` SET new='$newcards' WHERE name='name'";

然后从循环中获取更新,所以它看起来像这样:

random.php

当您在循环中包含文件时,它确实使代码更难以遵循。假设您的getRandomCard()有一个名为include的函数。你只能对include("admin/random.php"); for ($i = 1; $i <= 10; $i++) { $card = newRandomCard(); $cards .= $card . ", "; // builds list } 文件执行一次,然后多次调用该函数:

void freeD(D ** a){
    free( ( *a )->num);
    free(*a);
    *a=NULL;
}

//...

freeD( &smth );