Apabila menulis pertanyaan SQL teks dalam Go, anda mungkin menghadapi masalah semasa menggabungkan bahagian rentetan dengan nilai. Kaedah tradisional, seperti menggunakan ruang letak %d dan %s dalam rentetan, boleh membawa kepada ralat sintaks atau tidak sepadan jenis.
Penggabungan Gaya Python
Dalam Python, anda boleh menggabungkan rentetan dan nilai menggunakan operator % dalam rentetan petikan tiga kali ganda. Walau bagaimanapun, pendekatan ini tidak disokong dalam Go.
Go Equivalent
Untuk mencapai penggabungan serupa dalam Go, anda boleh menggunakan fungsi fmt.Sprintf. Ia memerlukan format rentetan sebagai hujah pertama dan hujah tambahan untuk ruang letak:
<code class="go">query := fmt.Sprintf(`SELECT columnA FROM tableA WHERE columnB = %d AND columnC = %s`, someNumber, someString)</code>
Mencegah Kerentanan Suntikan
Semasa menggabungkan nilai ke dalam pertanyaan, adalah penting untuk mengelakkan kelemahan suntikan. Daripada menggunakan ruang letak dalam rentetan, pertimbangkan untuk menggunakan pernyataan yang disediakan:
<code class="go">query := `SELECT columnA FROM tableA WHERE columnB = ? AND columnC = ?` rows, err := db.Query(query, val1, val2)</code>
Di sini, ? ruang letak mewakili nilai, dan val1 dan val2 dihantar sebagai argumen kepada db.Query. Kaedah ini memastikan keselamatan pertanyaan dan menghalang input berniat jahat daripada menjejaskan pangkalan data.
Atas ialah kandungan terperinci Bagaimana untuk Membina Pertanyaan SQL Teks dengan Selamat dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!