Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PDO:Übergeben Sie eine MySQL-Funktion an bindValue/bindParam

Nein. Ein Abfrageparameter ersetzt nur einen einzelnen konstanten Wert. Beispielsweise eine numerische Konstante oder eine Literalzeichenfolge oder ein Datum.

Alles andere – Spaltennamen, Tabellennamen, SQL-Schlüsselwörter, Funktionen, Ausdrücke – muss zum Parsing-Zeitpunkt im SQL-String enthalten sein.

Zu Ihrem Kommentar:

Sie sollten verstehen, dass Parameter nicht sind nur eine Bequemlichkeit, um zusätzliche Zeichenfolgen in Ihr SQL zu interpolieren. PREPARE entspricht einer Kompilierphase für Java oder C#, während EXECUTE dem Ausführen des kompilierten Codes entspricht.

Zur Vorbereitungszeit führt das RDBMS eine Syntaxprüfung und auch eine Validierung von Referenzen durch. Es muss einen Fehler ausgeben, wenn Sie eine Tabelle benennen, die nicht existiert, oder eine Funktion aufrufen, die nicht existiert.

Sie können keine Tabellennamen oder Funktionsaufrufe als Parameter übergeben, da das RDBMS diese Referenzen dann nicht zur Vorbereitungszeit validieren könnte. Sie sollten nicht in der Lage sein, einen Abfrageparameter zu verwenden, um die Syntax der Anweisung zu ändern oder ungültige Tabellen oder Funktionen einzuführen.

Daher muss der Parameterplatzhalter ein irreduzibles syntaktisches Element sein, das niemals eine ungültige Referenz ist, d. h. ein einzelner Literalwert – eine Zahl oder eine Zeichenfolge.