“fetch_assoc”值随if语句改变,PHP?

时间:2017-03-18 06:43:18

标签: php sql

我的情况很糟糕,我无法弄清楚发生了什么。

我有以下代码:

$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=

所以我这样做的两种不同的方法实际上是切换输出,我不能让两者都在查询变量中。到底发生了什么?任何帮助是极大的赞赏。

2 个答案:

答案 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行可解决我的问题。