You can check if a new booking overlaps an existing booking using the following logic:
SELECT * FROM reservations WHERE facility = :facility AND :begDate <= endDate AND :endDate >= begDate
Given a facility and a date range, the query will check if a reservation for the same reservation already exists with an overlapping time range. It returns the "problematic" reservation, or no rows if no conflict exists.