【问题标题】:Select and update the same row using while loop使用 while 循环选择和更新同一行
【发布时间】:2015-08-13 17:03:47
【问题描述】:

有一个循环查询(while 循环)从表中选择 2 个列值,然后代码对 2 个值求和,我需要用求和值更新另一列> 代码如下:

$stmt = $conn->prepare('select value1, value2, valuse3  from  eg.table limit ? ');
$stmt->bind_param('i',$limit);
$stmt->execute();
$stmt->bind_result($value1, $value2,$value3);
$arr = array();
while($stmt->fetch()) {
$row = array();
array_push($arr, $row);
$newvalue=($value1+$value2);

$stmt1 = $conn->prepare("UPDATE eg.table SET eg.column=? WHERE  eg2.column=?");
$stmt1->bind_param('ii',$newvalue , $value3);
$stmt1->execute();
}

当我使用此查询时,我收到此错误:致命错误:在第 13 行的 C:\xampp\htdocs\so\new\socialrank.php 中的布尔值上调用成员函数 bind_param()

如果您有其他解决方案来使用 Mysqli 完成这项工作,那也没关系。 任何帮助将不胜感激, 提前致谢。

【问题讨论】:

  • 在循环中执行 SQL 查询通常是不好的做法。最好在循环中构建一个批量查询,然后执行一次。
  • 显然您的语句无法准备好,操作返回 false(因此为布尔值)。除此之外,我真的不明白你想要达到什么目的。我认为 valuse 是价值的错字?而 WHERE 子句中的表 eg2 又是从哪里来的呢?
  • @StuartWagner 我同意你的观点,但我不知道该怎么做(我的意思是批量查询),我考虑过使用 JOIN 但我什至没有想象我该怎么写它在进行计算过程后进行选择和更新。
  • @TomasoAlbinoni 你知道,当我单独执行每个查询时,它们都可以工作!我现在的想法是 0,没有解决方案 :) 所以如果您有建议的解决方案,请发布。
  • 正如我所说,我不明白您要做什么。所以在你解释之前,我不会有解决方案。

标签: php oop join mysqli


【解决方案1】:

我得到了解决方案。这个查询和我一直在寻找的一样:

$sql = ("UPDATE eg.table AS c1, eg.table AS c2 
SET c1.eg.column = (c2.value1 + c2.value2)
WHERE c2.eg2.column = c1.eg2.column
");

注意:这个解决方案的灵感来自@CakePHP answer

【讨论】:

    猜你喜欢
    • 2014-12-07
    • 1970-01-01
    • 2018-07-19
    • 2018-05-16
    • 2018-10-04
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多