sql >> Database teknologi >  >> RDS >> Mysql

Ukendt kolonne i 'feltliste', når den forberedte sætnings pladsholder er i underforespørgsel

Din seneste redigering gjorde spørgsmålet meget klart, så jeg vil prøve et svar:Årsagen til denne forskel er pladsholderen.

Som dokumenteret her , kan pladsholdere kun bruges visse steder i forespørgslen. Især:

Nu har du måske bemærket, at SELECT ? as x forbereder fint, men ikke SELECT nr.x FROM (SELECT ? AS x) AS nr . Hvorfor det? Nå, dette er bedst forklaret af en anonym forfatter på PHP's dokument , så lad mig kopiere/indsætte:

Så enkelt sagt:fordi du bruger en pladsholder i en underforespørgsel i FROM klausul, kan MySQL ikke beregne eksekveringsplanen for forespørgslen.

Med andre ord, da din forespørgsel altid vil ændre sig, er der ingen "skabelon", der kan forberedes til det.

Derfor, hvis du virkelig ønsker at bruge denne forespørgsel, skal du bruge en normal (ikke-forberedt) forespørgsel eller slå PDO's emulerede forberedte udsagn til igen.

Når det er sagt, så overvej venligst de forskellige alternativer, der tilbydes i kommentarfeltet. Der er meget bedre løsninger til det, du forsøger at opnå.




  1. Sådan opdeles skrivebeskyttet og læse-skrive-transaktioner med JPA og Hibernate

  2. Brug OBJECT_NAME() til at hente et objekts navn fra dets object_id i SQL Server

  3. Python Opret forbindelse til MySQL-database med MySQL Connector &PyMySQL-eksempel

  4. Forbindelsen kan ikke castes til oracle.jdbc.OracleConnection