Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php while循环中的查询仅显示1个结果_Php_Mysql_Sql_Loops_While Loop - Fatal编程技术网

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

Php while循环中的查询仅显示1个结果,php,mysql,sql,loops,while-loop,Php,Mysql,Sql,Loops,While Loop,我正在用php做一个while循环,一切都很顺利,但问题是 我不仅想获取用户id,还想获取另一个表中的其他内容,因此,当我继续在while循环中进行查询并从第二个表中选择所有内容,其中id等于第一个查询结果的id时,它只返回1个结果 这就是我目前拥有的代码: public function getFriends($id) { global $params; $get = $this->db->select("{$this->DB['data']['friends']['tbl

我正在用php做一个while循环,一切都很顺利,但问题是 我不仅想获取用户id,还想获取另一个表中的其他内容,因此,当我继续在while循环中进行查询并从第二个表中选择所有内容,其中id等于第一个查询结果的id时,它只返回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查询时,吐出查询字符串,以便缩小问题的范围。回想起来,这通常会让你觉得很愚蠢:嗯,这个查询没有返回任何内容,因为我将记录ID格式化错误等等


您上面提供的代码片段对我没有太大帮助。我是一个疑难解答者而不是解析器,因此我需要诊断数据而不是直接代码来提供更多帮助。

在没有答案的情况下,我不知道您在scenese背后使用的是什么db框架…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']}
            ];
        }
    }
}

如果这不起作用,那么我们需要更多的数据。生成了什么查询?当您手动运行它时,它是否返回多个结果?如果您摆脱了内部查询,这会修复它吗?等等。

您是否能够使用外部查询中使用的任何内容执行fetchAll,以查看提前检索所有记录是否可以解决问题……如果上一个查询是逐行而不是一次性获取的,则同一连接上的内部查询有时会覆盖上一个查询。不,我无法执行fetchAll,还有其他提示吗?如果Kevin所说的查询干扰是一个因素,那么可以迭代第一个结果集,将其值存储在本地;然后迭代本地数组。