Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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中使用fetchAll返回多个数组_Php_Mysql_Pdo - Fatal编程技术网

在PHP中使用fetchAll返回多个数组

在PHP中使用fetchAll返回多个数组,php,mysql,pdo,Php,Mysql,Pdo,我正在尝试从数据库中检索多行。我遇到的问题是,每次使用此函数时,它都会替换我已尝试返回的所有其他行,并且只返回最后一行。如果有人知道更好的方法,或者知道如何真正做到这一点,请发表评论 新的张贴在这里,所以道歉,如果这是不正确的,在某些方面。谢谢 我的代码: public function getPosts($id){ global $pdo; $query = $pdo->prepare("SELECT * FROM friends WHERE f1 =

我正在尝试从数据库中检索多行。我遇到的问题是,每次使用此函数时,它都会替换我已尝试返回的所有其他行,并且只返回最后一行。如果有人知道更好的方法,或者知道如何真正做到这一点,请发表评论

新的张贴在这里,所以道歉,如果这是不正确的,在某些方面。谢谢

我的代码:

public function getPosts($id){
        global $pdo;

        $query = $pdo->prepare("SELECT * FROM friends WHERE f1 = ? OR f2 = ?");
        $query->bindValue(1, $id);
        $query->bindValue(2, $id);
        $query->execute();
        $res = $query->fetchAll();
            foreach($res as $user):
                if($user['f1'] == $id):
                    $query = $pdo->prepare("SELECT * FROM posts JOIN users ON posts.user_id = users.id WHERE user_id = ?");
                    $query->bindValue(1, $user['f2']);
                    $query->execute();
                else:
                    $query = $pdo->prepare("SELECT * FROM posts JOIN users ON posts.user_id = users.id WHERE user_id = ?");
                    $query->bindValue(1, $user['f1']);
                    $query->execute();
                endif;

                return $query->fetchAll(); //Trying to return arrays.
            endforeach;


}

试试这样的。我不知道f1和f2是什么,所以我只是添加了它们作为占位符。我这里不使用bindValue。只使用
数组($f1\u id,$f2\u id)


我建议将“posts”查询的结果添加到每个用户的“$res”数组中。然后返回“$res”数组,而不是仅返回特定用户的当前帖子

未测试代码:

public function getPosts($id){
        global $pdo;

        $query = $pdo->prepare("SELECT * FROM friends WHERE f1 = ? OR f2 = ?");
        $query->bindValue(1, $id);
        $query->bindValue(2, $id);
        $query->execute();
        $res = $query->fetchAll();
            foreach($res as &$user): // make a reference so i can modify it
                if($user['f1'] == $id):
                    $query = $pdo->prepare("SELECT * FROM posts JOIN users ON posts.user_id = users.id WHERE user_id = ?");
                    $query->bindValue(1, $user['f2']);
                    $query->execute();
                else:
                    $query = $pdo->prepare("SELECT * FROM posts JOIN users ON posts.user_id = users.id WHERE user_id = ?");
                    $query->bindValue(1, $user['f1']);
                    $query->execute();
                endif;

                $user['posts'] = $query->fetchAll(); // save the current users posts.
            endforeach;

            return $res; // all users and their posts.

}

我先前删除的关于剥离while循环的评论有点不完整和无用。所以我发布了一些代码。谢谢,非常感谢我所寻找的D@ivarpois
public function getPosts($id){
        global $pdo;

        $query = $pdo->prepare("SELECT * FROM friends WHERE f1 = ? OR f2 = ?");
        $query->bindValue(1, $id);
        $query->bindValue(2, $id);
        $query->execute();
        $res = $query->fetchAll();
            foreach($res as &$user): // make a reference so i can modify it
                if($user['f1'] == $id):
                    $query = $pdo->prepare("SELECT * FROM posts JOIN users ON posts.user_id = users.id WHERE user_id = ?");
                    $query->bindValue(1, $user['f2']);
                    $query->execute();
                else:
                    $query = $pdo->prepare("SELECT * FROM posts JOIN users ON posts.user_id = users.id WHERE user_id = ?");
                    $query->bindValue(1, $user['f1']);
                    $query->execute();
                endif;

                $user['posts'] = $query->fetchAll(); // save the current users posts.
            endforeach;

            return $res; // all users and their posts.

}