PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

JavaScript (Postgres DB) - Cách sử dụng một câu lệnh đã chuẩn bị sẵn với một mảng làm tham số trong mệnh đề WHERE IN ()

Nó được mô tả trong Câu hỏi thường gặp về node-postgres https://github.com/brianc/node-postgres/wiki/FAQ#11-how- do-i-build-a-where-foo-in - query-to-find-row-match-an-array-of-value

Làm cách nào để tạo truy vấn WHERE foo IN (...) để tìm các hàng phù hợp với một mảng giá trị? node-postgres hỗ trợ ánh xạ các mảng JavaScript đơn giản sang mảng PostgreSQL, vì vậy trong hầu hết các trường hợp, bạn có thể chuyển nó giống như bất kỳ tham số.

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

Lưu ý rằng =ANY là một cách khác để viết IN (...), nhưng không giống như IN (...), nó sẽ hoạt động theo cách bạn mong đợi khi bạn truyền một mảng làm tham số truy vấn.

Nếu bạn biết trước độ dài của mảng, bạn có thể làm phẳng nó thành danh sách IN:

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

... nhưng có rất ít lợi ích khi =ANY hoạt động với một mảng JavaScript.

Nếu bạn đang sử dụng phiên bản cũ của node-postgres hoặc bạn cần tạo các mảng PostgreSQL phức tạp hơn (các mảng kiểu kết hợp, v.v.) mà node-postgres không đối phó được, bạn có thể tạo một mảng ký tự bằng SQL động, nhưng cực kỳ cẩn thận với SQL injection khi thực hiện việc này. Cách tiếp cận sau đây an toàn vì nó tạo một chuỗi truy vấn với các tham số truy vấn và danh sách tham số được làm phẳng, vì vậy bạn vẫn đang sử dụng hỗ trợ của trình điều khiển cho các truy vấn được tham số ("câu lệnh chuẩn bị") để bảo vệ khỏi việc đưa vào SQL:

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

Hy vọng điều đó sẽ giúp ích vì google không tìm thấy điều này




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP PDO Postgres so với kiểu cột Sqlite cho số lượng (*)

  2. Kết hợp hai bảng thành một bảng mới để các hàng được chọn từ bảng kia bị bỏ qua

  3. 3 cách liệt kê tất cả các thủ tục được lưu trữ trong cơ sở dữ liệu PostgreSQL

  4. Hướng dẫn bất hợp pháp:4 khi chạy Django

  5. Postgresql JSONB sắp ra mắt. Dùng gì bây giờ? Hstore? JSON? EAV?