http://php.net/manual/en/pdo.prepare.php afferma:
Come questo indica, il motivo probabile dietro il tuo codice che funziona su un server e non su un altro è che PDO::ATTR_EMULATE_PREPARES
è disabilitato sul server su cui il codice non riesce. Come dice la documentazione, questo attributo rimuove efficacemente la restrizione che ti impedisce di utilizzare due volte un indicatore di parametro con lo stesso nome (insieme ad alcune altre restrizioni).