При запросе PDO к базе выдаёт дублированые записи, почему так?
Заканчивалась вторая декада 21 века, а пользователи похапе так и лепили в своем коде тупейшую SQL инъекцию...
query выкидываем на помойку, вместо этого используем prepare с параметрами, а все переменные отправляем в execute.
Достаточно почитать что означает второй аргумент PDO:
php.net/manual/en/pdo.query.php
Он же первый аргумент, например, у метода 
php.net/manual/en/pdostatement.fetchall.php
По умолчанию там PDO::FETCH_BOTH