Din senaste redigering gjorde frågan väldigt tydlig, så jag ska försöka svara:orsaken till denna skillnad är platshållaren.
Som dokumenterats här , kan platshållare endast användas på vissa platser i frågan. I synnerhet:
Nu kanske du har märkt att SELECT ? as x
förbereder fint, men inte SELECT nr.x FROM (SELECT ? AS x) AS nr
. Varför är det så? Detta förklaras bäst av en anonym författare på PHPs dokument
, så låt mig kopiera/klistra in:
Så enkelt uttryckt:eftersom du använder en platshållare i en underfråga i FROM
kan MySQL inte beräkna exekveringsplanen för frågan.
Med andra ord, eftersom din fråga alltid kommer att ändras finns det ingen "mall" som kan förberedas för det.
Om du verkligen vill använda den här frågan måste du därför använda en normal (icke-förberedd) fråga, eller slå tillbaka på PDO:s emulerade förberedda uttalanden.
Med det sagt, snälla, överväg de olika alternativen som erbjuds i kommentarsfältet. Det finns mycket bättre lösningar för det du försöker uppnå.