Menggabungkan Teks dan Nilai dalam Pertanyaan SQL Go
Apabila membina pertanyaan SQL teks dalam Go, terdapat peraturan sintaks tertentu yang perlu dipatuhi semasa menggabungkan komponen rentetan dan nilai, terutamanya apabila menggunakan integer.
Dalam kod Python yang disediakan, pendekatan tuple tidak sah dalam Go dan percubaan menghantar parameter sebagai rentetan akan mengakibatkan ralat tidak padan jenis.
Cara idiomatik untuk mencapai ini dalam Go ialah menggunakan fmt.Sprintf untuk memformat rentetan pertanyaan. Ini membolehkan anda membenamkan nilai dalam rentetan pada masa jalan:
<code class="go">query := fmt.Sprintf(`SELECT columnA FROM tableA WHERE columnB = %d AND columnB = %s`, someNumber, someString)</code>
Di sini, pemegang tempat %d dan %s masing-masing mewakili nilai integer dan rentetan, yang kemudiannya diberikan semasa panggilan db.Query:
<code class="go">rows, err := db.Query(query, val1, val2)</code>
Pendekatan ini memastikan bahawa nilai diformat dengan betul dan menghalang kelemahan suntikan SQL.
Mengelakkan SQL Injection
Adalah penting untuk ambil perhatian bahawa penggabungan rentetan dalam pertanyaan SQL boleh membawa kepada kelemahan suntikan. Untuk mengurangkan risiko ini, gunakan penyata yang disediakan dan pertanyaan berparameter. Dengan menghantar nilai sebagai parameter, anda boleh menghalang input berniat jahat daripada mengubah suai pertanyaan SQL yang dimaksudkan.
Sebagai contoh:
<code class="go">stmt, err := db.Prepare(`SELECT columnA FROM tableA WHERE columnB = ? AND columnB = ?`) rows, err := stmt.Query(val1, val2)</code>
Dengan menggunakan pernyataan yang disediakan, anda boleh melindungi aplikasi anda daripada input SQL yang berniat jahat sambil mengekalkan kemudahan membina pertanyaan dinamik.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menggabungkan teks dan nilai dengan selamat semasa membina pertanyaan SQL dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!