如何在 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 相关的列,并将当前列值连接到您想要的添加字符串。