【发布时间】:2019-08-24 20:27:38
【问题描述】:
我想制作一个可以展示活动的网站。我想根据位置和日期制作过滤功能。
我使用这个查询来过滤日期:
function selectAllActivities($date = false, $locations = false){
$sql = "SELECT * FROM `activities`
INNER JOIN `locations` ON `activities`.`location_id` = `locations`.`id`
WHERE 1";
if (!empty($date)){
$sql .= " AND `activities`.`start` >= :date AND `activities`.`start` < :next_day";
}
if (!empty($locations)){
}
}
$stmt = $this->pdo->prepare($sql);
if ($date){
$dateTime = date("Y-m-d", strtotime($date));
$dateTimeTomorrow= date("Y-m-d", strtotime($date.'+1 day'));
$stmt->bindValue(':date', $dateTime);
$stmt->bindValue(':next_day', $dateTimeTomorrow);
}
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
对于位置,我在 $locations 中有一个包含所选日期的数组,但是当用户选择多个要过滤的位置时,我不知道如何将参数动态绑定到查询。
这就是我想要的硬编码方式:
SELECT * FROM `activities` WHERE 1 AND `location_id` IN (:location_id_0, :location_id_1, :location_id_2)
$stmt->bindValue(':location_id_1', $locations[0]);
$stmt->bindValue(':location_id_2', $locations[1]);
$stmt->bindValue(':location_id_3', $locations[2]);
我想我需要使用 foreach 函数,但我不知道如何使用。
【问题讨论】:
-
@Qirel 是的,它以数组的形式出现
-
我在评论后的最后一个code-sn-p中注意到了,因此我删除了评论:)