2017-03-18 22 views
0

我有一個非常bizzare的情況,我無法弄清楚發生了什麼事情。「fetch_assoc」值隨if語句,PHP變化而變化?

我有以下代碼:

$conn->query("UPDATE teachers SET active=1 WHERE id=".$next_teacher_id); 

$list_of_arr=$conn->query("SELECT * FROM teachers WHERE id>=".$next_teacher_id); 
$k = $list_of_arr->fetch_assoc(); 
    $choice_array=unserialize($k['arr']); 
    foreach ($choice_array as $j) { 
     $matched_query=$conn->query("SELECT * FROM students WHERE taken_by='' AND name LIKE '%".$j."%'"); 
     $matched_row=$matched_query->fetch_assoc(); 
     if (isset($matched_row['id'])) { 
      $qu="UPDATE students SET taken_by='".$k['name']."' WHERE id=".$matched_row['id']; 
      echo($qu); 
      $conn->query($qu); 
      break; 
     } 
    $k=$list_of_arr->fetch_assoc(); 

} 

這將呼應UPDATE students SET taken_by='' WHERE id=19

但是,如果我不是改線(無其他任何變動):

if (isset($matched_row['id'])) 

要:

if (isset($k['name'])) 

我現在得到的回聲:

UPDATE students SET taken_by='John Smith' WHERE id= 

作爲對照實驗,如果我說:

if(true) 

我得到的輸出:

UPDATE students SET taken_by='John Smith' WHERE id= 

於是兩種不同的方式我做它實際切換我的輸出,我不能讓這兩個在查詢變量。這裏到底發生了什麼?任何幫助是極大的讚賞。

+0

寫您的地方在此格式'WHERE ID ='的條件那 –

+0

只是給了我這個「‘$ next_teacher_id。’‘:'UPDATE學生樹立taken_by =’約翰史密斯」 WHERE ID =‘’'作爲輸出。不知爲什麼,其中一個價值觀變得無效。但我不明白這兩個變量是如何相互影響的。 – rb612

+0

但您正在用錯誤的語法編寫查詢。 –

回答

1

這種替換代碼:

$conn->query("UPDATE teachers SET active=1 WHERE id='".$next_teacher_id."'); 

$list_of_arr=$conn->query("SELECT * FROM teachers WHERE id>='".$next_teacher_id."'); 
$k = $list_of_arr->fetch_assoc(); 
    $choice_array=unserialize($k['arr']); 
    foreach ($choice_array as $j) { 
     $matched_query=$conn->query("SELECT * FROM students WHERE taken_by='' AND name LIKE '%".$j."%'"); 
     $matched_row=$matched_query->fetch_assoc(); 
     if (isset($matched_row['id'])) { 
      $qu="UPDATE students SET taken_by='".$k['name']."' WHERE id='".$matched_row['id']."'"; 
      echo $qu; 
      $conn->query($qu); 
      break; 
     } 
    $k=$list_of_arr->fetch_assoc(); 

} 
+0

謝謝你你的答案,Sweta。我意識到這實際上不是解決方案,即使我明白你幫助我使語法正確。 – rb612

0

其實我終於沒有想出一個解決方案。基本上,因爲它是一個foreach循環,我意外地錯放了我的支架,所以fetch_assoc()內部foreach循環,當它應該已經外面。 if-statement沒有改變任何變量,它是foreach循環迭代,只有當條件爲真時纔回顯語句,因此改變語句改變輸出的原因。將支架下方的fetch_assoc()線移到我的問題上。