【发布时间】:2021-10-14 01:48:53
【问题描述】:
我正在尝试根据用户 ID 获取网站 ID 列表。
这是我到目前为止所得到的。
public function getSites() {
$stmt = $this->db->prepare("SELECT Sites_idSites FROM favorites WHERE User_idUser=:idUser");
$userId = $_SESSION['user_session']['idUser'];
$stmt->bindparam(":idUser", $userId);
$stmt->execute();
$siteList = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($siteList as $value) {
foreach($value as $key) {
$stmt = $this->db->prepare("SELECT * FROM sites WHERE idSites=:siteList");
$stmt->bindparam(":siteList", $key);
}
$stmt->execute();
$userSites = $stmt->fetch(PDO::FETCH_ASSOC);
}
return $userSites;
这是我转到“收藏夹”表并获取与用户 ID 对应的所有站点 ID 的部分。
$stmt = $this->db->prepare("SELECT Sites_idSites FROM favorites WHERE User_idUser=:idUser");
$userId = $_SESSION['user_session']['idUser'];
$stmt->bindparam(":idUser", $userId);
$stmt->execute();
$siteList = $stmt->fetchAll(PDO::FETCH_ASSOC);
$siteList 以这样的数组形式返回:
Array
(
[0] => Array
(
[Sites_idSites] => 20
)
[1] => Array
(
[Sites_idSites] => 21
)
[2] => Array
(
[Sites_idSites] => 22
)
)
现在,我想转到所有站点所在的表,并且只获取具有这些 id 的站点。
这是我正在使用的,但它只获取最后一个:
foreach($siteList as $value) {
foreach($value as $key) {
$stmt = $this->db->prepare("SELECT * FROM sites WHERE idSites=:siteList");
$stmt->bindparam(":siteList", $key);
}
$stmt->execute();
$userSites = $stmt->fetch(PDO::FETCH_ASSOC);
}
如果我这样做print_r($userSites),我会返回:
Array
(
[idSites] => 22
[name] => rwrwer
[url] => werwerwerwer
[Category_idCategory] => 1
)
如您所见,它只返回最后一个。如何让它返回一个包含所有站点的数组?我做错了吗?
我终于修好了:
public function getSites() {
$stmt = $this->db->prepare("SELECT sites.* FROM favorites INNER JOIN sites ON favorites.Sites_idSites = sites.idSites WHERE favorites.User_idUser = :idUser");
$userId = $_SESSION['user_session']['idUser'];
$stmt->bindparam(":idUser", $userId);
$stmt->execute();
$siteList = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $siteList;
}
【问题讨论】: