2017-03-18 45 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()线移到我的问题上。