Twoja ostatnia zmiana sprawiła, że pytanie było bardzo jasne, więc spróbuję odpowiedzieć:przyczyną tej różnicy jest symbol zastępczy.
Jak udokumentowano tutaj , symbole zastępcze mogą być używane tylko w określonych miejscach zapytania. W szczególności:
Być może zauważyłeś, że SELECT ? as x
przygotowuje się dobrze, ale nie SELECT nr.x FROM (SELECT ? AS x) AS nr
. Dlaczego? Najlepiej wyjaśnia to anonimowy autor dokumentu PHP
, więc pozwól mi skopiować/wkleić:
Mówiąc prosto:ponieważ używasz symbolu zastępczego w podzapytaniu w FROM
klauzula, MySQL nie może obliczyć planu wykonania zapytania.
Innymi słowy, ponieważ Twoje zapytanie będzie się zawsze zmieniać, nie ma „szablonu”, który można by na nie przygotować.
Dlatego jeśli naprawdę chcesz użyć tego zapytania, musisz użyć normalnego (nieprzygotowanego) zapytania lub ponownie włączyć emulowane przygotowane instrukcje PDO.
Biorąc to pod uwagę, proszę rozważyć różne alternatywy oferowane w sekcji komentarzy. Istnieją znacznie lepsze rozwiązania dla tego, co próbujesz osiągnąć.