PDO wird nicht durch das Fragezeichen in den Anführungszeichen verwirrt. Ich teste das gerade mit 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());
Es funktioniert gut, ohne Fehler über eine falsche Anzahl von Parametern. Ihr Fehler wird durch die Art und Weise verursacht, wie Sie Parameter binden, nicht durch die SQL-Syntax.
Ich vermute, Sie haben uns nicht die gesamte SQL-Abfrage gezeigt, weil WHERE ohne FROM sowieso ein Syntaxfehler ist. Sie müssen also zusätzliche Parameterplatzhalter haben, die Sie uns nicht gezeigt haben. Es wäre auch hilfreich, wenn Sie uns zeigen würden, wie Sie Parameter binden (oder Parameter an execute() übergeben).