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

PDO:passa una funzione MySQL a bindValue/bindParam

No. Un parametro di query sostituisce solo un singolo valore costante. Ad esempio, una costante numerica o una stringa letterale o una data.

Qualsiasi altra cosa -- nomi di colonne, nomi di tabelle, parole chiave SQL, funzioni, espressioni -- deve trovarsi nella stringa SQL al momento dell'analisi.

Re il tuo commento:

Dovresti capire che i parametri non solo una comodità per interpolare stringhe extra nel tuo SQL. PREPARE è analogo a una fase di compilazione per Java o C#, mentre EXECUTE è analogo all'esecuzione del codice compilato.

Il tempo di preparazione è quando l'RDBMS esegue il controllo della sintassi e anche la convalida dei riferimenti. Deve dare un errore se assegni un nome a una tabella che non esiste o invochi una funzione che non esiste.

Non puoi passare nomi di tabelle o chiamate di funzione come parametri perché in tal caso RDBMS non sarebbe in grado di convalidare quei riferimenti in fase di preparazione. Non dovresti essere in grado di utilizzare un parametro di query per modificare la sintassi dell'istruzione o introdurre tabelle o funzioni non valide.

Quindi il segnaposto del parametro deve essere un elemento sintattico irriducibile che non è mai un riferimento non valido, ovvero un singolo valore letterale -- un numero o una stringa.