sql >> Database teknologi >  >> RDS >> PostgreSQL

JavaScript (Postgres DB) - Sådan bruges en forberedt sætning med et array som parameter i WHERE IN ( )-sætningen

Det er beskrevet i FAQ for node-postgres https://github.com/brianc/node-postgres/wiki/FAQ#11-how- do-i-build-a-where-foo-in--query-to-find-rows-matching-en-array-of-values

Hvordan opbygger jeg en WHERE foo IN (...)-forespørgsel for at finde rækker, der matcher en matrix af værdier?node-postgres understøtter kortlægning af simple JavaScript-arrays til PostgreSQL-arrays, så i de fleste tilfælde kan du bare sende den som enhver anden parameter.

client.query("SELECT * FROM stooges WHERE name = ANY ($1)", [ ['larry', 'curly', 'moe'] ], ...);

Bemærk, at =ANY er en anden måde at skrive IN (...), men i modsætning til IN (...) vil det fungere, som du ville forvente, når du sender et array som en forespørgselsparameter.

Hvis du kender længden af ​​arrayet på forhånd, kan du flad det ud til en IN-liste:

// passing a flat array of values will work:
client.query("SELECT * FROM stooges WHERE name IN ($1, $2, $3)", ['larry', 'curly', 'moe'], ...);

... men der er ringe fordel, når =ANY arbejder med et JavaScript-array.

Hvis du er på en gammel version af node-postgres, eller du har brug for at skabe mere komplekse PostgreSQL-arrays (arrays af sammensatte typer osv.), som node-postgres ikke kan klare, kan du generere et array literal med dynamisk SQL, men vær ekstremt forsigtig med SQL-injektion, når du gør dette. Følgende fremgangsmåde er sikker, fordi den genererer en forespørgselsstreng med forespørgselsparametre og en fladtrykt parameterliste, så du stadig bruger driverens understøttelse af parameteriserede forespørgsler ("forberedte sætninger") til at beskytte mod SQL-injektion:

var stooge_names = ['larry', 'curly', 'moe'];
var offset = 1;
var placeholders = stooge_names.map(function(name,i) { 
    return '$'+(i+offset); 
}).join(',');
client.query("SELECT * FROM stooges WHERE name IN ("+placeholders+")", stooge_names, ...);

Håber det hjælper, da google ikke kan finde dette




  1. Hvordan håndhæver man en unik begrænsning i MySQL?

  2. MySQL tilfældig resultatgruppe efter bestilling efter

  3. Oracle Funktion til at opdatere en tabel, hvis posten er null, så INSERT

  4. Codeigniter - Adgangsmodeller og database om routing