Bagaimana untuk Melaksanakan Pertanyaan Pangkalan Data Go dengan Slice dalam Klausa IN?

Mary-Kate Olsen
Lepaskan: 2024-10-25 21:11:28
asal
401 orang telah melayarinya

How to Execute a Go Database Query with a Slice in the IN Clause?

Pertanyaan Pangkalan Data Golang Menggunakan Klausa Slice IN: Pemahaman Komprehensif

Soalan:

Mengapa pertanyaan pangkalan data Golang berikut menggunakan sepotong int dalam klausa IN gagal:

<code class="go">inq := "6,7" //strings.Join(artIds, ",")
rows, err = db.Query("SELECT DISTINCT title FROM tags_for_articles LEFT JOIN tags ON tags.id = tags_for_articles.tag_id WHERE article_id IN (?)", inq)</code>
Salin selepas log masuk

Jawapan:

Isu timbul kerana pakej pangkalan data/sql yang digunakan untuk pertanyaan tidak memeriksa pertanyaan dan menghantar hujah terus kepada pemacu pangkalan data. Ini menjadikan pengendalian pertanyaan dengan klausa IN yang mengandungi bilangan pembolehubah argumen mencabar.

Dalam pertanyaan yang disediakan, ? bind variable sepadan dengan satu hujah, manakala penggunaan yang dimaksudkan adalah untuk mengikat berbilang argumen berdasarkan panjang slice artId. Walau bagaimanapun, pemandu tidak dapat mengendalikan perkara ini dengan betul.

Untuk menangani isu ini, adalah disyorkan untuk menggunakan pakej sqlx, yang memberikan kawalan yang lebih besar ke atas pertanyaan pangkalan data.

Penyelesaian Menggunakan Pakej sqlx:

<code class="go">var artIds = []int{6, 7}
query, args, err := sqlx.In("SELECT DISTINCT title FROM tags_for_articles LEFT JOIN tags ON tags.id = tags_for_articles.tag_id WHERE article_id IN (?);", artIds)</code>
Salin selepas log masuk

Fungsi sqlx.In memproses pertanyaan dan menjana pembolehubah ikatan yang sesuai untuk kepingan int, membolehkan pertanyaan itu dilaksanakan dengan jayanya.

Untuk mendapatkan maklumat lanjut tentang topik ini, rujuk dokumentasi Godoc untuk InQueries.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pertanyaan Pangkalan Data Go dengan Slice dalam Klausa IN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!