PDO non è confuso dal punto interrogativo tra virgolette. L'ho appena testato con PHP 5.5.15.
$sql = "SELECT CONCAT('path/to/page/?id=', id) AS link FROM foo WHERE name = ?;";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(1, 'name');
$stmt->execute();
print_r($stmt->fetchAll());
Funziona bene, senza errori su un numero errato di parametri. Il tuo errore è causato dal modo in cui stai associando i parametri, non dalla sintassi SQL.
Sospetto che tu non ci abbia mostrato l'intera query SQL, perché WHERE senza FROM è comunque un errore di sintassi. Quindi devi disporre di segnaposto di parametri aggiuntivi che non ci hai mostrato. Sarebbe anche utile se ci mostrassi il modo in cui stai vincolando i parametri (o passando i parametri per eseguire()).