while 循环内的查询仅显示 1 个结果

query inside while loop only shows 1 result

我在 php 中做了一个 while 循环,一切顺利,但问题是 我不仅想获取用户的 ID,还想获取另一个 table 中的一些其他内容,所以当我继续在这个 while 循环中进行查询时,select 中的所有内容第二个table(其中id等于第一个查询结果的id),它只有returns 1个结果...

所以这是我目前拥有的代码:

public function getFriends($id)
{
global $params;

$get = $this->db->select("{$this->DB['data']['friends']['tbl']}", "*",
                          array(
                                "{$this->DB['data']['friends']['one']}" => $id
                          )
                        );

if($get)
{
    while($key = $get->fetch())
    {
        $query = $this->db->query("SELECT * FROM {$this->DB['data']['users']['tbl']}
                                   WHERE {$this->DB['data']['users']['id']} = :id",
                                   array(
                                         "id" => $key->{$this->DB['data']['friends']['two']}
                                   )
                                 );

        while($row = $query->fetch())
        {
            $params["user_friends"][] = [
                "id"   => $key->{$this->DB['data']['friends']['two']},
                "name" => $row->{$this->DB['data']['users']['username']},
                "look" => $row->{$this->DB['data']['users']['figure']}
            ];
        }
    }
}
else
{
    $params["update_error"] = $params["lang_no_friends"];
}
}

提前致谢! 请帮帮我!

诊断 PHP 和 Mysql 问题的第一步是在代码中添加行,告诉您每一行在做什么(每次进入循环时声明;当每个 mysql query is 运行, 吐出查询字符串)这样就可以缩小问题出在哪里了。通常这会让你回想起来很愚蠢:"Duh, this query didn't return anything because I formatted the record ID wrong" 等等。

您在上面提供的代码片段对我帮助不大。我是故障排除者(不是解析器),所以我需要诊断数据(不是直接代码)来提供比这更多的帮助。

在没有答案的情况下,我不知道您在幕后使用的是什么数据库框架……PDO、mysqli_ 或(希望不是)mysql_。但是,无论如何,问题可能是您的第二个查询阻止了第一个查询继续。我会使用 PDO->fetchAll() 来获取所有这些......但你说你不能那样做......所以,循环第一个并将这些结果加载到数组中是我要做的第一件事,看看是否这是问题所在:

public function getFriends($id)
{
    global $params;

    $get = $this->db->select("{$this->DB['data']['friends']['tbl']}", "*",
                              array(
                                    "{$this->DB['data']['friends']['one']}" => $id
                              )
                            );

    $firstResults = array();
    if( $get ) {
        while( $key = $get->fetch() ) {
            $firstResults[] = $key;
        }
    }
    else
    {
        $params["update_error"] = $params["lang_no_friends"];
    }

    foreach( $firstResults AS $key )
    {
        $query = $this->db->query("SELECT * FROM {$this->DB['data']['users']['tbl']}
                                   WHERE {$this->DB['data']['users']['id']} = :id",
                                   array(
                                         "id" => $key->{$this->DB['data']['friends']['two']}
                                   )
                                 );

        while($row = $query->fetch())
        {
            $params["user_friends"][] = [
                "id"   => $key->{$this->DB['data']['friends']['two']},
                "name" => $row->{$this->DB['data']['users']['username']},
                "look" => $row->{$this->DB['data']['users']['figure']}
            ];
        }
    }
}

如果这不起作用,那么我们需要更多数据...例如生成的查询是什么?当您 运行 它手动执行 return 不止一个结果?如果您摆脱内部查询,是否可以解决问题?等等