Sua última edição deixou a pergunta muito clara, então tentarei uma resposta:a causa dessa diferença é o espaço reservado.
Conforme documentado aqui , os marcadores de posição só podem ser usados em determinados locais da consulta. Em particular:
Agora você deve ter notado que
SELECT ? as x
prepara bem, mas não SELECT nr.x FROM (SELECT ? AS x) AS nr
. Por que é que? Bem, isso é melhor explicado por um autor anônimo no documento do PHP
, então deixe-me copiar/colar:Então, basta colocar:porque você está usando um espaço reservado em uma subconsulta no
FROM
cláusula, o MySQL não pode calcular o plano de execução da consulta. Em outras palavras, como sua consulta sempre mudará, não há "modelo" que possa ser preparado para ela.
Portanto, se você realmente quiser usar essa consulta, precisará usar uma consulta normal (não preparada) ou retornar às instruções preparadas emuladas do PDO.
Dito isto, por favor, considere as várias alternativas oferecidas na seção de comentários. Existem soluções muito melhores para o que você está tentando alcançar.