Php PDO fetchAll未返回所有行

Php PDO fetchAll未返回所有行,php,arrays,pdo,fetch,fetchall,Php,Arrays,Pdo,Fetch,Fetchall,所以我尝试从数据库中获取多个内容。它不起作用。 在我的函数文件中,我有: public function getAllMultiple($username, $course) { foreach ($course as $key) { $query = $this->database->db->prepare("SELECT * FROM `status` WHERE `posted_by` = ? OR `shared` = ? ORDER B

所以我尝试从数据库中获取多个内容。它不起作用。 在我的函数文件中,我有:

public function getAllMultiple($username, $course) {
        foreach ($course as $key) {
        $query = $this->database->db->prepare("SELECT * FROM `status` WHERE `posted_by` = ? OR `shared` = ? ORDER BY `date_added` DESC");
        $query->bindValue(1, $username);
        $query->bindValue(2, $key['1']);
        try {
            $query->execute();
        } catch (PDOException $e) {
            die($e->getMessage());
        }
            return $query->fetchAll();
        }
}
在我的馈送功能中,我有:

$array = $course->getAllAsMember($username);
print_r($course->getAllMultiple($username, $array);

我有两门课。我有一个药物课程和一个班级课程。不幸的是,它只返回了药物课程。我做错什么了吗

要扩展我的评论,您可以执行以下操作:

public function getAllMultiple($username, $course) {
    $query = $this->database->db->prepare("SELECT * FROM `status` WHERE `posted_by` = ? OR `shared` = ? ORDER BY `date_added` DESC");
    $results = array();
    foreach ($course as $key) {

        $query->bindValue(1, $username);
        $query->bindValue(2, $key['1']);
        try {
            $query->execute();
        } catch (PDOException $e) {
            die($e->getMessage());
        }
        results[] = $query->fetchAll();
     }
    return $results;
}

您还应该改进错误处理,例如将所有内容放在
try
-
catch
块中,而不仅仅是其中的一部分。

函数的返回位停止函数的执行并返回值。如果要返回所执行查询的两个结果,则需要将它们分配到数组,然后返回:

public function getAllMultiple($username, $course) {
    $return = array(); //initialize the array before the foreach function
    foreach ($course as $key) {
        $query = $this->database->db->prepare("SELECT * FROM `status` WHERE `posted_by` = ? OR `shared` = ? ORDER BY `date_added` DESC");
        $query->bindValue(1, $username);
        $query->bindValue(2, $key['1']);
        try {
            $query->execute();
        } catch (PDOException $e) {
            die($e->getMessage());
        }
        $return[] = $query->fetchAll(); //collect the results
    }
    return $return; //return the array
}

希望我的评论是不言自明的。

每次迭代都会替换
$query
的值,并且永远不会执行它。我很惊讶它居然能工作。如果上面的代码不是您的实际代码,请更新它。您需要提供更多代码,这里没有
fetchAll
,您也不会从函数返回任何内容。你也应该在循环之前准备好你的查询,因为你只需要做一次。只是更新它@Jeroeny你的函数失败了,因为它一返回就停止执行函数,永远不会到达第二个数组项。我的缺点是没有提供所有的代码。在()中使用会更好或者加入,而不是反复运行查询。@Jessica是的,只进行一次查询是最好的,在这里应该没有问题;这只是为了解决OP当前存在的问题,我还没有真正研究sql。@user1475632您应该接受Jessica的建议,将查询数减少到1,而不管结果的数量。@Jessica我会使用它,但没有任何线索。对不起,我才13岁,对phpI来说我还是个新手。我只是接受了你的建议,了解了加入。很酷的东西。谢谢@Jessica谢谢你。那将节省我很多时间。不要接受我的回答。我被一个更好的答案打败了,这个: