Membuat Pertanyaan SQL dengan Berkesan dalam Go
Menggabungkan rentetan dengan nilai dalam pertanyaan SQL teks boleh menjadi agak rumit dalam Go. Tidak seperti Python, sintaks pemformatan rentetan Go berkelakuan berbeza, membawa kepada ralat biasa seperti yang ditemui di sini.
Ralat Sintaks Tuple
Coretan kod awal cuba menggunakan Python -style tuple, yang tidak disokong dalam Go. Ini mengakibatkan ralat sintaks:
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %d`, (val1, val2))</code>
Jenis Tidak Padan
Percubaan untuk menghantar elemen tuple sebagai rentetan juga gagal disebabkan oleh jenis yang tidak sepadan:
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %d`, val1, val2)</code>
Elakkan Operator Tidak Padan
Menghantar parameter sebagai rentetan dan menggabungkannya dengan operator %s akan berfungsi tetapi tidak disyorkan. Pendekatan ini memperkenalkan risiko ketidakpadanan operator:
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %s AND column2_name = %s`, strconv.Itoa(val1), val2)</code>
The Go Solution
Untuk menulis dengan betul pertanyaan SQL teks dengan penggabungan nilai dalam Go, gunakan fmt.Sprintf seperti berikut:
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %s`, val1, val2)</code>
Sintaks ini mengelakkan kelemahan suntikan dan memastikan penukaran jenis yang betul.
Pencegahan Suntikan
Untuk mengelakkan serangan suntikan SQL, sentiasa gunakan pernyataan yang disediakan atau sediakan aksara melarikan diri untuk input yang dibekalkan pengguna.
Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Rentetan dengan Nilai dalam Pertanyaan SQL Menggunakan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!