Последната ви редакция направи въпроса много ясен, така че ще се опитам да отговоря:причината за тази разлика е заместителят.
Както е документирано тук , заместителите могат да се използват само на определени места в заявката. По-специално:
Сега може би сте забелязали, че SELECT ? as x
подготвя се добре, но не SELECT nr.x FROM (SELECT ? AS x) AS nr
. Защо така? Е, това е най-добре обяснено от анонимен автор в документа на PHP
, така че нека копирам/поставя:
Така че просто казано:защото използвате заместител в подзаявка в FROM
клауза, MySQL не може да изчисли плана за изпълнение на заявката.
С други думи, тъй като заявката ви винаги ще се променя, няма „шаблон“, който може да бъде подготвен за нея.
Следователно, ако наистина искате да използвате тази заявка, трябва да използвате нормална (неподготвена) заявка или да включите отново емулираните подготвени оператори на PDO.
Като се има предвид това, моля, помислете за различните алтернативи, предлагани в секцията за коментари. Има много по-добри решения за това, което се опитвате да постигнете.