我有一个查询,我从一个表中获取多个结果。然后,我需要遍历每个结果以从其他表中获取信息,但是,我无法使它起作用。

这是我的代码:

<?php

    $type = 1;

    if ($stmt = $cxn->prepare('SELECT username FROM users WHERE type = ?')) {
        $stmt->bind_param('i', $type);
        $stmt->execute();
        $stmt->bind_result($username);

        while ($stmt->fetch()) {
            if ($stmt = $cxn->prepare('SELECT count FROM posts WHERE username = ?')) {
                $stmt->bind_param('s', $username);
                $stmt->execute();
                $stmt->bind_result($result2);
                $stmt->close();
            }
        }
        $stmt->close();
    }

?>


我收到一个错误:

Call to a member function fetch() on a non-object


我该如何解决?

最佳答案

我强烈建议为此使用本机SQL JOIN,因为它将避免在发送潜在的数千个查询时避免不必要的开销:

SELECT
    u.username,
    p.count
FROM
    users u
        LEFT JOIN // processed as LEFT OUTER JOIN so the syntax is interchangeable just fyi
        posts p
        ON u.username = p.username
WHERE
    p.type = ?


仅解释LEFT JOIN,我们将使其保持简单=)


在上面的SQL中,我们从整个users表中的username开始
users u只是为我们授予了u.username的快捷语法,因此SQL可读且不会
接下来,我们要将posts p表附加到u.username = p.username,因为每个用户名都需要p.count
最后,我们根据p.type等于




请注意,根据DBMS,这里有很多事情在起作用。这样的事情包括查询优化器,过滤的确切点等,但是这远远超出了简单地掌握我们试图从概念上实现的范围的范围,因此我将不做详细介绍,因为这只会引起混乱。

10-07 19:42
查看更多