Wie dynamisch erstellen von Abfragen mit PDO
Ich bin mit PDO und wollen, so etwas zu tun:
$query = $dbh->prepare("SELECT * FROM :table WHERE :column = :value");
$query->bindParam(':table', $tableName);
$query->bindParam(':column', $columnName);
$query->bindParam(':value', $value);
Wird PDO erlauben Sie mir zum binden der name der Tabelle name der Spalte wie diese? Es scheint, um es zu ermöglichen, aber es setzt Anführungszeichen um die Parameter, selbst wenn ich PDO::PARAM_INT oder PDO::PARAM_BOOL als Datentyp.
Wenn dies nicht funktioniert, wie kann ich sicher entkommen meine Variablen so, dass ich interpolieren kann Sie in der Abfrage?
- Eine vorbereitete Anweisung ist eine Abfrage, die den Weg wurde analysiert. Sie können nicht analysieren einer Abfrage, keine Tabelle oder sogar Spalte Informationen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider kann man keine bind-Parameter von Spaltennamen.
Was Sie könnten versuchen, ist, um dynamisch erstellen Sie Ihre SQL-Befehl:
Nur stellen Sie sicher zu bereinigen Ihre Parameter/Variablen, wenn Sie von anderswo kommen, um zu verhindern, dass SQL-Injection. In diesem Fall
$value
ist sicher zu einem gewissen Grad aber$tableName
und$columnName
sind nicht -- auch das ist den meisten vor allem, wenn die Werte für diese Variablen sind nicht vonyou
und stattdessen die von Ihren Benutzern/Besuchern/etc...Eine andere Sache; bitte vermeiden Sie die Verwendung
*
Namen und Ihre Spalten statt... Finden Sie einige Gründe, warum:http://www.jasonvolpe.com/topics/sql/
Performance-Problem bei Verwendung von SELECT *?
Sehen ähnliche Beiträge hier:
Warum nicht binden Sie den parameter in der ORDER BY-Klausel, um die Ergebnisse?
Wie setze ich UM, INDEM params PDO mit prepared statement?
not
zu entkommen Parameter beim binden mit PDO ' sbindParam
oderbindValue
da der Wert ist 'gebunden' als Wert und nicht als etwas interpretiert werden, als etwas anderes, aber ichhighly recommend
, die Sie bereinigen/überprüfen Sie alle Eingaben, die von Ihrem Benutzer. Das schließt Abfragezeichenfolgen.Es ist nicht klar, aus Ihrer Frage, warum würden Sie wollen, zu 'binden' den Namen einer Tabelle.
Optionen für PDO parameter verbindlich sind
Machen, die Tabelle oder Sicht, die variable würde Niederlage der Zweck der Anweisung preperation.