Erweiterung auf die Antwort von Daniel Vérité ...
Sie können nicht Prepared Statements mit dynamischen Spaltennamen kombinieren, dann würden Sie die Abfrage auf der Client-Seite erzeugen müssen.
Mit pg-promise Syntax für SQL Names können Sie richtig Ihre Abfrage wie folgt entkommen:
db.any('SELECT $1~ FROM table', [colName])
// OR:
db.any('SELECT $1:name FROM table', [colName])
// OR:
db.any('SELECT ${colName~} FROM table', {colName})
// OR:
db.any('SELECT ${colName:name} FROM table', {colName})
// Etc, other variable syntax, like $[], $//, $<>, $()
Und wenn Sie wollen, dass es für eine Liste von Spalten tun, dann der einfachste Weg, es so zu tun ist:
const colNames = ['one', 'two', 'three'];
db.any('SELECT $1~ FROM table', [colNames])
// etc, the same variations as above, all will generate:
// SELECT "one","two","three" FROM table
oder von allen Objekteigenschaften:
const data = {
one: 123,
two: true,
three: 'text'
};
db.any('SELECT $1~ FROM table', [data])
// etc, the same variations as above, all will generate:
// SELECT "one","two","three" FROM table
Alle diese Methoden umgehen die Abfrage ordnungsgemäß und stellen sicher, dass die SQL-Injektion nicht möglich ist.
sind Sie sicher, dass Sie Kennung wie das passieren kann .. –
@VaoTsun in pg Dokumentation ein sehr ähnliches Beispiel ist: https://www.npmjs.com/package/pg – wizard
genau, geben Sie die Dokumentation die Syntax : 'pool.query ('SELECT $ 1 :: int AS number', ['2'], function (err, res)', die Sie nicht in Ihrem Code verwenden – VladNeacsu