sql >> Database >  >> RDS >> PostgreSQL

JavaScript (Postgres DB) - Een voorbereide instructie gebruiken met een array als parameter in de WHERE IN ( )-clausule

Het wordt beschreven in de FAQ van node-postgres https://github.com/brianc/node-postgres/wiki/FAQ#11-how- doe-ik-bouw-een-waar-foo-in-query-to-find-rows-matching-an-array-of-values

Hoe bouw ik een WHERE foo IN (...)-query om rijen te vinden die overeenkomen met een array van waarden?node-postgres ondersteunt het toewijzen van eenvoudige JavaScript-arrays aan PostgreSQL-arrays, dus in de meeste gevallen kunt u het net als alle andere doorgeven parameter.

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

Merk op dat =ANY een andere manier is om IN (...) te schrijven, maar in tegenstelling tot IN (...) werkt het zoals je zou verwachten als je een array doorgeeft als een queryparameter.

Als je van tevoren de lengte van de array weet, kun je deze afvlakken tot een IN-lijst:

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

... maar er is weinig voordeel als =ANY werkt met een JavaScript-array.

Als u een oude versie van node-postgres gebruikt of als u complexere PostgreSQL-arrays (arrays van samengestelde typen, enz.) moet maken die node-postgres niet aankan, kunt u een letterlijke array genereren met dynamische SQL, maar wees uiterst voorzichtig met SQL-injectie wanneer u dit doet. De volgende aanpak is veilig omdat het een queryreeks genereert met queryparameters en een afgevlakte parameterlijst, dus u gebruikt nog steeds de ondersteuning van het stuurprogramma voor geparametriseerde query's ("voorbereide instructies") om te beschermen tegen SQL-injectie:

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, ...);

Ik hoop dat dit helpt, aangezien Google dit niet kan vinden




  1. Hoe verklein ik mijn SQL Server-database?

  2. Wachtwoordverificatie mislukt fout bij het uitvoeren van laravel-migratie

  3. Som over waarden per maand in milliseconden

  4. PHP-tijd sinds functiefout