Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melaksanakan Pertanyaan Pangkalan Data Go dengan Slice dalam Klausa IN?

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-25 21:11:28393semak imbas

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>

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>

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!

Kenyataan:
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