PDO tidak bingung dengan tanda tanya di dalam tanda kutip. Saya baru saja menguji ini dengan 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());
Ini berfungsi dengan baik, tanpa kesalahan tentang jumlah parameter yang salah. Kesalahan Anda disebabkan oleh cara Anda mengikat parameter, bukan oleh sintaks SQL.
Saya menduga Anda belum menunjukkan kepada kami seluruh kueri SQL, karena WHERE tanpa FROM adalah kesalahan sintaksis. Jadi, Anda harus memiliki placeholder parameter tambahan yang belum Anda tunjukkan kepada kami. Akan sangat membantu jika Anda menunjukkan kepada kami cara Anda mengikat parameter (atau meneruskan parameter ke execute()).