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

Phương pháp hay nhất để tạo truy vấn SQL SELECT trong khi xử lý các giá trị không xác định tiềm năng

Sự cố này giống như được ghi lại ở đây: https://github.com / importanty-t / pg-promise / Problem / 442

Về cơ bản, pg-promise công cụ định dạng truy vấn tạo SQL theo các tham số định dạng của bạn. Nó KHÔNG thực hiện bất kỳ xác minh cú pháp nào trên SQL kết quả của bạn.

Bạn đang tạo IN () , là SQL không hợp lệ, vì vậy bạn sẽ gặp lỗi.

Bạn nên kiểm tra sự hiện diện của biến và thậm chí không cố tạo một truy vấn như vậy khi biến đó bị thiếu, vì khi đó truy vấn của bạn sẽ không thể mang lại kết quả tốt.

Ví dụ:

router.get('/search', (req, res, next) => {
    const variables = ['variable_a', 'variable_b', 'variable_c'];
    const conditions = variables.filter(v => v in req.query)
        .map(v => pgp.as.format('$1:name IN ($2:csv)', [v, req.query[v]]))
        .join(' AND ');

    conditions = conditions && 'WHERE ' + conditions;

    db.any('SELECT * FROM food $1:raw', conditions)
        .then(result => res.send(result))
        .catch(error => {/* handle the error */});
});

Có thể có các giải pháp khác, như pg-promise rất chung chung, nó không giới hạn cách bạn tiếp cận vấn đề này.

Ví dụ:thay vì cái này:

v => pgp.as.format('$1:name IN ($2:csv)', [v, req.query[v]])

bạn có thể làm điều này:

v => pgp.as.name(v) + ' IN (' + pgp.as.csv(req.query[v]) + ')';

mà sẽ tạo ra cùng một kết quả. Tùy bạn thích!;)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Heroku Rails 4 không thể kết nối với máy chủ:kết nối bị từ chối

  2. * Trường không được công nhận tại:cơ sở dữ liệu Ý bạn là ?:- số liệu - máy chủ - ghi nhật ký - DROPWIZARD

  3. Lỗi liên kết với libpq bằng C ++

  4. Postgresql, truy xuất giá trị cho khóa cụ thể từ mảng json

  5. Tập lệnh PHP với các lệnh PostgreSQL trả về NULL cho dữ liệu JSon