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

8

Ist es möglich, MySQL-Funktionen mit bindValue() einzufügen? Mein Code unten wird nur als die Zeichenfolge 'NOW()' anstelle der Funktion NOW() (ohne Anführungszeichen) ausgegeben.

%Vor%     
enchance 02.01.2012, 18:24
quelle

2 Antworten

9

Nein. Ein Abfrageparameter ersetzt nur einen einzelnen konstanten Wert. Zum Beispiel eine numerische Konstante oder eine literale Zeichenfolge oder ein Datum.

Alles andere - Spaltennamen, Tabellennamen, SQL-Schlüsselwörter, Funktionen, Ausdrücke - müssen sich zur Parserzeit in der SQL-Zeichenfolge befinden.

Re deinen Kommentar:

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

Vorbereitungszeit ist, wenn das RDBMS Syntaxprüfung und auch die Überprüfung von Referenzen durchführt. Es muss einen Fehler geben, 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 zum Zeitpunkt der Vorbereitung validieren kann. 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.

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

    
Bill Karwin 02.01.2012, 18:31
quelle
7

Nein, weil Platzhalter in vorbereiteten Anweisungen automatisch maskiert werden. Also in Ihrem Fall wird es sehen, dass es eine Zeichenfolge ist und (zumindest) es in Anführungszeichen setzen 'NOW()' . Jetzt ist es nur eine Zeichenfolge für mysql für mysql. Sie können die aktuelle Datetime mit PHP

einstellen %Vor%     
KingCrunch 02.01.2012 18:29
quelle

Tags und Links