Sisipan Berbilang Baris dengan pg-promise
Masalah:
Sisipan menggunakan parameter satu objek boleh dilakukan dengan mudah menggunakan pg-promise, tetapi sisipan berbilang baris memerlukan teknik yang lebih kompleks. Adakah terdapat kaedah mudah untuk memasukkan berbilang baris dengan satu pertanyaan?
Penyelesaian:
Dalam versi pg-promise yang lebih baharu, ruang nama pembantu menyediakan kaedah yang dioptimumkan dan fleksibel untuk sisipan berbilang baris. Daripada membina rentetan pertanyaan secara manual, anda boleh menggunakan fungsi sisip dalam ruang nama pembantu:
const pgp = require('pg-promise')({ capSQL: true // capitalize all SQL }); const db = pgp(/*connection*/); const {ColumnSet, insert} = pgp.helpers; const cs = new ColumnSet(['col_a', 'col_b'], {table: 'tmp'}); const values = [{col_a: 'a1', col_b: 'b1'}, {col_a: 'a2', col_b: 'b2'}]; const query = insert(values, cs); await db.none(query);
Kod ini menjana SQL berikut:
<code class="sql">INSERT INTO "tmp"("col_a","col_b") VALUES('a1', 'b1'),('a2', 'b2')</code>
Pendekatan ini menawarkan beberapa kelebihan:
Soalan Sampingan:
Sisipan menggunakan tatatanda parameter dilindungi daripada suntikan SQL apabila nama parameter dipetik dengan betul. Walau bagaimanapun, jika sisipan dinamik nama lajur atau jadual diperlukan, Nama SQL harus digunakan untuk perlindungan tambahan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh melakukan sisipan berbilang baris dengan cekap dengan pg-promise?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!