PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Praktik terbaik untuk membuat kueri SQL SELECT sambil menangani nilai potensial yang tidak ditentukan

Masalah ini sama dengan yang dicatat di sini:https://github.com /vitaly-t/pg-promise/issues/442

Pada dasarnya, pg-promise mesin pemformatan kueri menghasilkan SQL sesuai dengan parameter pemformatan Anda. Itu TIDAK melakukan verifikasi sintaks apa pun pada SQL yang Anda hasilkan.

Anda membuat IN () , yang merupakan SQL yang tidak valid, sehingga Anda mendapatkan kesalahan.

Anda harus memeriksa keberadaan variabel, dan bahkan tidak mencoba membuat kueri seperti itu saat variabel tidak ada, karena kueri Anda tidak akan dapat menghasilkan sesuatu yang baik saat itu.

Contoh:

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 */});
});

Mungkin ada solusi lain, seperti pg-promise sangat umum, tidak membatasi cara Anda mendekati ini.

Misalnya, alih-alih ini:

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

Anda dapat melakukan ini:

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

yang akan menghasilkan hasil yang sama. Apapun yang Anda suka!;)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django dan PostgreSQL - nilai terlalu panjang untuk tipe karakter yang bervariasi (512)

  2. PostgreSQL 8.4 memberikan hak istimewa DML di semua tabel ke sebuah peran

  3. PHP komet usleep memblokir apache mpm?

  4. Apakah PostgreSQL menggunakan tf-idf?

  5. Bagaimana cara menentukan "awal hari ini" di zona waktu tertentu?