PHP关于while循环中修改选取条件出现的错误

业务需求是:

  1. 读取某个表中每一行的的字段A、B、C的值
  2. 如果C的值是0,就改成1或者2

代码大概是这么写的:

$query = "SELECT * FROM table WHERE C = 0";
$result = mysqli_query($link, $query);
if($result){
    while ($rows = mysqli_fetch_array($result)){
        if (判断条件为true) {
            $query = "UPDATE table SET C = 1 WHERE A = '".$rows['A']."' AND B = '".$rows['B']."'";
            mysqli_query($link, $query);
        }else{
            $query = "UPDATE table SET C = 2 WHERE A = '".$rows['A']."' AND B = '".$rows['B']."'";
            mysqli_query($link, $query)            
        }
    }
}

实际操作中,循环只会操作第一行,把第一行的C更新为1或者2,之后就出现错误,提示:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\***.php on line 21(即上述while的那行)

我理解第一个sql语句已经把表的行都获得了,我在判断后把相应的行的值改了,为什么会影响到第一个sql语句取值的结果?

慕勒3428872
浏览 340回答 4
4回答

子衿沉夜

经测试 这段代码没有问题 检查下 $result是否在其他地方被重新赋值了

收到一只叮咚

mysqli_fetch_array($result, MYSQLI_ASSOC) 然后 foreach 不就完了,而且你这个 $rows = mysqli_fetch_array($result) 不是一个恒等于? 你这个while 语句的结束条件是什么

郎朗坤

如果条件判断可控,为啥不考虑直接写SQL批量更新?

月关宝盒

$rows = mysqli_fetch_array($result)这里的等号最好用双等号"==",一个等于号=是赋值,两个等于号"=="才是数值比较
打开App,查看更多内容
随时随地看视频慕课网APP