Din seneste redigering gjorde spørgsmålet meget klart, så jeg vil prøve et svar:Årsagen til denne forskel er pladsholderen.
Som dokumenteret her , kan pladsholdere kun bruges visse steder i forespørgslen. Især:
Nu har du måske bemærket, at SELECT ? as x
forbereder fint, men ikke SELECT nr.x FROM (SELECT ? AS x) AS nr
. Hvorfor det? Nå, dette er bedst forklaret af en anonym forfatter på PHP's dokument
, så lad mig kopiere/indsætte:
Så enkelt sagt:fordi du bruger en pladsholder i en underforespørgsel i FROM
klausul, kan MySQL ikke beregne eksekveringsplanen for forespørgslen.
Med andre ord, da din forespørgsel altid vil ændre sig, er der ingen "skabelon", der kan forberedes til det.
Derfor, hvis du virkelig ønsker at bruge denne forespørgsel, skal du bruge en normal (ikke-forberedt) forespørgsel eller slå PDO's emulerede forberedte udsagn til igen.
Når det er sagt, så overvej venligst de forskellige alternativer, der tilbydes i kommentarfeltet. Der er meget bedre løsninger til det, du forsøger at opnå.