我有一个查询,我从一个表中获取多个结果。然后,我需要遍历每个结果以从其他表中获取信息,但是,我无法使它起作用。
这是我的代码:
<?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,这里有很多事情在起作用。这样的事情包括查询优化器,过滤的确切点等,但是这远远超出了简单地掌握我们试图从概念上实现的范围的范围,因此我将不做详细介绍,因为这只会引起混乱。