如何在 foreach 循环中执行两个不同的 php 准备好的语句?

How to execute two different php prepared statements inside a foreach loop?

我想获取列的值,向其中添加一个字符串,然后用新值更新该列,并对数组的每个元素重复此操作。我想使用准备好的语句,所以我的梦想代码(我知道这行不通)是:

$getcolumn = $link->prepare("SELECT `column` FROM `table` WHERE `id`=? LIMIT 1");
$getcolumn->bind_param("i", $a_value);

$updatecolumn = $link->prepare("UPDATE `table` SET `column`=? WHERE `id`=? LIMIT 1");
$updatecolumn->bind_param("si", $newcolumnvalue, $a_value);

foreach($array as $a => $a_value) {             
    $getcolumn->execute();
    $getcolumn->bind_result($columnvalue);
    $getcolumn->fetch();

    $newcolumnvalue = $columnvalue.$addedstring;    

    $updatecolumn->execute();
}

$getcolumn->close();
$updatecolumn->close();

但是,要使其正常工作,我应该在执行 $updatecolumn 之前关闭 $getcolumn。但是,如果我在 foreach 循环内关闭 $getcolumn,它就不会对数组的所有元素重复。那么我如何使用准备好的语句以有效的方式编写它呢?提前谢谢你。

就像上面的评论一样,我建议另一种方法并使用 MySQL 内置函数的 CONCAT 而不是从第一个准备中获取所有行:

$updatecolumn = $link->prepare("UPDATE `table` SET `column` = CONCAT(`column`, ?) WHERE id = ?");
$updatecolumn->bind_param("si", $addedstring, $a_value);
$updatecolumn->execute();

它只是消除了获取行的第一步,这只是更新与该 ID 相关的列并将当前列值连接到您想要的添加字符串。