I have a website where I load various activities who all have a specific date. I want to filter on those dates.
I do that with this query:
x
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);
}
If there is no date given, the page will load all the activities, but if someone wants to select a specific date to see which activities there are on that date, I use this code:
public function index() {
$activityDAO = new ActivityDAO();
if (!empty($_GET['date'])) {
$activities = $activityDAO->selectAllActivities($_GET['date']);
} else {
$activities = $activityDAO->selectAllActivities();
}
$this->set('activities',$activities);
}
The page loading of all the activities is working fine, but if I select a specific date, the array with activities stays empty and no activities will load.
Advertisement
Answer
Since the column is Datetime , in your sql , you are injecting timestamp value , so that cause that yor result is always empty .
Instead , you can convert Date given to datetime with the same format ‘Y-m-d-h-m’ using gmdate:
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";
}
$dateTime = gmdate("Y-m-d-h-m", strtotime($date));
$dateTimeTomorrow=gmdate("Y-m-d-h-m", strtotime($date.'+1 day'));
$stmt = $this->pdo->prepare($sql);
$stmt->bindValue(':date', $dateTime);
$stmt->bindValue(':next_day', $dateTimeTomorrow);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}