PDO não se confunde com o ponto de interrogação entre aspas. Acabei de testar isso com 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());
Funciona bem, sem erro sobre um número errado de parâmetros. Seu erro é causado pela forma como você está vinculando parâmetros, não pela sintaxe SQL.
Eu suspeito que você não nos mostrou toda a consulta SQL, porque WHERE sem FROM é um erro de sintaxe de qualquer maneira. Portanto, você deve ter espaços reservados de parâmetros adicionais que não nos mostrou. Também seria útil se você nos mostrasse como está vinculando parâmetros (ou passando parâmetros para execute()).