PDOは、引用符内の疑問符と混同されません。これをPHP5.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());
パラメータの数が間違っていてもエラーは発生せず、正常に動作します。エラーの原因は、SQL構文ではなく、パラメーターのバインド方法です。
FROMなしのWHEREはとにかく構文エラーであるため、SQLクエリ全体を表示していないと思われます。したがって、表示していない追加のパラメータプレースホルダーが必要です。パラメータをバインドする方法(またはexecute()にパラメータを渡す方法)を示しておくと便利です。