Для правильного вопроса надо знать половину ответа
Стандартно - в отдельной таблице связи многие-ко-многим.
Современный способ - в колонке с типом JSON.
Говнокод - в строке через запятую или другой разделитель.
Для правильного вопроса надо знать половину ответа
Не путайте кэш и хэш.
Делать такое надо на бэкенде. Что у вас там есть - PHP или Node.js, на том и делать.
Но я бы сделал отдельный скрипт, который по крону обновляет данные в БД.
Для правильного вопроса надо знать половину ответа
Выведите через var_dump сформированную строку запроса и массив параметров. Убедитесь, что в массиве есть все параметры, указанные в запросе, и нет ни одного лишнего параметра.
Для правильного вопроса надо знать половину ответа
В чём задача? Показывать записи, до конца действия которых осталось меньше суток?
С этим гораздо лучше справится сама БД:
SELECT `ads_title`, `ads_period_publication`
FROM `uni_ads`
WHERE `ads_id_user` = :iduser
AND `ads_period_publication` BETWEEN NOW() AND NOW() + INTERVAL 1 DAY
Для правильного вопроса надо знать половину ответа
Во-первых, плейсхолдерами можно заменять только данные. Имена баз, таблиц, колонок, а также служебные слова плейсхолдерами не заменяются.
Во-вторых, в bind_param можно биндить только переменные, но не константы.
Для правильного вопроса надо знать половину ответа
В первом приближении - при обращении к константе, переменной или методу класса, если такового не найдено, то используется соответствующий член родительского класса.
В классе B не переопределена статическая переменная $constraints, поэтому при обращении к B::$constraints реальное обращение происходит к A::$constraints. И, так как эта переменная статическая, то она создаётся не для каждого экземпляра, а для самого класса.