Mysql
 sql >> Base de données >  >> RDS >> Mysql

Colonne inconnue dans la "liste des champs" lorsque l'espace réservé de l'instruction préparée est dans la sous-requête

Votre dernière modification a rendu la question très claire, je vais donc tenter une réponse :la cause de cette différence est l'espace réservé.

Comme documenté ici , les espaces réservés ne peuvent être utilisés qu'à certains endroits de la requête. En particulier :

Maintenant, vous avez peut-être remarqué que SELECT ? as x se prépare bien, mais pas SELECT nr.x FROM (SELECT ? AS x) AS nr . Pourquoi donc? Eh bien, cela est mieux expliqué par un auteur anonyme sur la doc de PHP , alors laissez-moi copier/coller :

En termes simples :parce que vous utilisez un espace réservé dans une sous-requête dans le FROM clause, MySQL ne peut pas calculer le plan d'exécution de la requête.

En d'autres termes, puisque votre requête changera toujours, il n'y a pas de "modèle" qui peut être préparé pour cela.

Par conséquent, si vous voulez vraiment utiliser cette requête, vous devez utiliser une requête normale (non préparée) ou réactiver les instructions préparées émulées de PDO.

Cela étant dit, veuillez considérer les différentes alternatives proposées dans la section des commentaires. Il existe de bien meilleures solutions pour ce que vous essayez d'accomplir.