Кажется, вы используете MySQL Date функцию неправильно - вы действительно планировали использовать вместо этого функцию php date ?Например, вместо
"[...] credit_date >= date('now','-".$history_days." days') group by [...]"
вам нужно написать:
"[...] credit_date >= '".date('-'.$history_days.' days')."' group by [...]"
Только переменные (например, $ history_days) будут расширены на php в строке, заключенной в двойные кавычки ("), но не вызовы функций. Если вы заключили вызов функции в строку, php не сможет его распознать, и он будет передан в mysql вместо того, чтобы сначала выполняться php, но вы хотите, чтобы php его оценил, поэтомувам придется исключить ее из строковой константы и добавить к ней строку с операторами конкатенации (.).
Однако вызов функции php date также кажется неправильным; получить "текущую дату минус"определенное количество дней ", лучше всего использовать функции даты mysql, например:
"[...] credit_date >= DATE_SUB(NOW(), INTERVAL '$history_days' DAY) group by [...]"
И только одно общее замечание о безопасности: из фрагмента сценария, который вы предоставляете, не ясно, но если значения в$history_days
, $history_length
, $user_id
или $expiry_duration
(переменные, используемые внутри оператора SQL) имеют только самый отдаленный шанс быть установленным пользователем, вы не должны вставлять их непосредственно в SQL-запрос., но сделать что-нибудь, чтобы предотвратить внедрение SQL .