在Go 中有效地編寫SQL 查詢
在Go 中將字串與文字SQL 查詢中的值連接起來可能有點棘手。與 Python 不同,Go 的字串格式化語法行為不同,導致常見錯誤,如此處遇到的錯誤。
元組語法錯誤
初始程式碼片段嘗試使用 Python -style 元組,Go 中不支援。這會導致語法錯誤:
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %d`, (val1, val2))</code>
類型不符
嘗試將元組元素轉換為字串也會因類型不符而失敗:
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %d`, val1, val2)</code>
避免運算子不符
將參數轉換為字串並將它們與運算符%s 連接起來可以,但不建議這樣做。這種方法引入了運算符不匹配的風險:
<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>
Go 解決方案
要在Go 中正確編寫帶有值串聯的文本SQL 查詢,請使用fmt.Sprintf如下所示:
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %s`, val1, val2)</code>
此語法可以避免注入漏洞並確保正確的類型轉換。
注入預防
要防止 SQL 注入攻擊,請務必使用準備好的語句或提供使用者的輸入提供轉義字元。
以上是如何使用 Go 在 SQL 查詢中有效連接字串和值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!