Vaše poslední úprava udělala otázku velmi jasnou, takže se pokusím odpovědět:příčinou tohoto rozdílu je zástupný symbol.
Jak je zdokumentováno zde , zástupné symboly lze použít pouze na určitých místech v dotazu. Konkrétně:
Možná jste si všimli, že SELECT ? as x
připraví se dobře, ale ne SELECT nr.x FROM (SELECT ? AS x) AS nr
. proč tomu tak je? To nejlépe vysvětluje anonymní autor dokumentu PHP
, tak mi dovolte zkopírovat/vložit:
Jednoduše řečeno:protože v poddotazu v FROM
používáte zástupný symbol klauzule, MySQL nemůže vypočítat plán provádění dotazu.
Jinými slovy, protože se váš dotaz vždy změní, neexistuje žádná „šablona“, která by na něj mohla být připravena.
Pokud tedy opravdu chcete použít tento dotaz, musíte použít normální (nepřipravený) dotaz nebo znovu zapnout emulované připravené příkazy PDO.
Jak již bylo řečeno, zvažte prosím různé alternativy nabízené v sekci komentářů. Pro to, čeho se snažíte dosáhnout, existují mnohem lepší řešení.