Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在foreach循环中执行两个不同的php准备语句?_Php_Loops_Mysqli_Foreach_Prepared Statement - Fatal编程技术网

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

如何在foreach循环中执行两个不同的php准备语句?,php,loops,mysqli,foreach,prepared-statement,Php,Loops,Mysqli,Foreach,Prepared Statement,我想获取一列的值,向其中添加一个字符串,然后用新值更新该列,并对数组的每个元素重复此操作。我想使用预先准备好的语句,所以我的梦想代码(我知道这行不通)是: $getcolumn = $link->prepare("SELECT `column` FROM `table` WHERE `id`=? LIMIT 1"); $getcolumn->bind_param("i", $a_value); $updatecolumn = $link->prepare("UPDATE `t

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

$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相关的列,并将当前列值连接到所需的添加字符串。

那么,您需要执行第一步,从第一步获取,然后更新第二步,为什么需要第一条语句?你能不能只使用mysql内置的
concat(列名?)
只进行一次更新我不熟悉concat。请帮助我理解如何在使用修改后的值更新列之前,使用concat.Perfect向获取的列值添加字符串!非常感谢你。这是拼图中丢失的一块。:)@安纳西沃拉尼很高兴这有帮助