我的情况很糟糕,我无法弄清楚发生了什么。
我有以下代码:
$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 :(得分: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();
}
答案 1 :(得分:0)
我实际上终于找到了解决方案。基本上是因为它是一个 $file = "/home/user/".$file_name1;
循环而且我不小心放错了我的括号所以foreach
,里面 fetch_assoc()
循环,当它应该在外面时。 foreach
没有改变任何变量,if-statement
循环是迭代的,只有当条件为真时才回显一个语句,因此更改语句的原因改变了输出。移动括号下方的foreach
行可解决我的问题。