$expires_at =
!empty($post['date']) ? date_format(date_create($post['date']), 'Y-m-d') : NULL;
А входные данные обрабатываются или как есть? А если что пришло тому и верим, то !empty(" ") есть истина, и какая же в таком случае дата должна быть создана?
Строковые значения всегда и везде заключаются в кавычки. Только вы используете РНР 7, а в тоже время не используете возможностей mysqli. Вы думаете она сама по себе занимается экранированием в запросах? Как бы не так. А ведь есть же mysqli_stmt:
repare, mysqli_stmt::bind_param и т.д., которые как раз и решат ваши проблемы, и обезопасят запрос.