【发布时间】:2019-08-24 08:22:09
【问题描述】:
我有一个网站,我可以在其中加载各种活动,这些活动都有特定的日期。我想过滤这些日期。
我用这个查询来做到这一点:
function selectAllActivities($date = false){
$sql = "SELECT * FROM `activities`
INNER JOIN `locations` on `activities`.`location_id` = `locations`.`id`";
if (!empty($date)){
$sql .= " WHERE `activities`.`start` >= :date AND `activities`.`start` < :next_day";
}
$stmt = $this->pdo->prepare($sql);
$stmt->bindValue(':date', strtotime($date));
$stmt->bindValue(':next_day', strtotime($date.'+1 day'));
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
如果没有给出日期,页面将加载所有活动,但如果有人想选择特定日期以查看该日期有哪些活动,我使用此代码:
public function index() {
$activityDAO = new ActivityDAO();
if (!empty($_GET['date'])) {
$activities = $activityDAO->selectAllActivities($_GET['date']);
} else {
$activities = $activityDAO->selectAllActivities();
}
$this->set('activities',$activities);
}
所有活动的页面加载工作正常,但如果我选择特定日期,则包含活动的数组保持为空,不会加载任何活动。
【问题讨论】:
-
$_GET['date']是什么样的?activities.start列是什么数据类型? -
你的错误检查代码在哪里
-
@RiggsFolly date = 'Y-m-d' and activities.start = 'Y-m-d-h-m'
-
您是说
activities.start是文本数据类型,而不是日期、日期时间或时间戳? -
@RiggsFolly 哦,不抱歉!它是一个日期数据类型