鍍金池/ 問答/PHP  網(wǎng)絡(luò)安全/ PHP關(guān)于while循環(huán)中修改選取條件出現(xiàn)的錯(cuò)誤

PHP關(guān)于while循環(huán)中修改選取條件出現(xiàn)的錯(cuò)誤

業(yè)務(wù)需求是:

  1. 讀取某個(gè)表中每一行的的字段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)            
        }
    }
}

實(shí)際操作中,循環(huán)只會(huì)操作第一行,把第一行的C更新為1或者2,之后就出現(xiàn)錯(cuò)誤,提示:

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

我理解第一個(gè)sql語句已經(jīng)把表的行都獲得了,我在判斷后把相應(yīng)的行的值改了,為什么會(huì)影響到第一個(gè)sql語句取值的結(jié)果?

回答
編輯回答
單眼皮

$rows = mysqli_fetch_array($result)這里的等號(hào)最好用雙等號(hào)"==",一個(gè)等于號(hào)=是賦值,兩個(gè)等于號(hào)"=="才是數(shù)值比較

2018年4月17日 04:10
編輯回答
汐顏

mysqli_fetch_array($result, MYSQLI_ASSOC) 然后 foreach 不就完了,而且你這個(gè) $rows = mysqli_fetch_array($result) 不是一個(gè)恒等于? 你這個(gè)while 語句的結(jié)束條件是什么

2017年2月15日 12:18
編輯回答
萌面人

如果條件判斷可控,為啥不考慮直接寫SQL批量更新?

2018年1月6日 19:54
編輯回答
巷尾

經(jīng)測(cè)試 這段代碼沒有問題 檢查下 $result是否在其他地方被重新賦值了

2017年12月9日 23:41