я конечно на мега спеца по SQL не претендую, но
PDO::prepare - подготавливает выражение на сервере, которое можно использовать многократно, т.е. 1 запрос или 100 с разными параметрами, уже не так важно.
PDO::query - подготавливает и использует выражение на один раз, для всех последующих запросов, даже однотипных, запрос будет строится с нуля.