我找不到一個很好的例子來說明將文本查詢的字符串部分與值連接起來的正確方法。例如:query := `SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %d` % (val1, val2)rows, res, err := db.Query(query)這不起作用。編譯器syntax error: unexpected comma, expecting ) 可能返回,因為我正在嘗試使用 python 樣式的元組。如果我將其重寫為query := `SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %d` % val1我得到(mismatched types string and int)它告訴我元組是問題之一。如果我首先將參數(shù)轉(zhuǎn)換為字符串,我會得到 (operator % not defined on string)在 python 中,你會做類似的事情query = """SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %d""" % (val1, val2)或者query = """SELECT column_name FROM table_name WHERE column1_name = %s AND column2_name = %s""" % (val1_string, val2_string)我知道我可以將值轉(zhuǎn)換為字符串并使用 連接"STRING" + var + "STRING",但與 python 版本相比,這似乎非常混亂。Go 中 Python 代碼的等價物是什么?具體包括元組部分,并連接一個字符串和一個整數(shù)。
1 回答

函數(shù)式編程
TA貢獻1807條經(jīng)驗 獲得超9個贊
< 由于注入漏洞而對 SQL 語句使用字符串插值的標準警告 >
你可以用它fmt.Sprintf來處理這個。
query := fmt.Sprintf(`SELECT columnA FROM tableA WHERE columnB = %d AND columnB = %s`,
someNumber, someString)
為避免注入問題,請將您的第一個代碼編寫為:
query := `SELECT column_name FROM table_name
WHERE column1_name = %d AND column2_name = %d`
rows, err := db.Query(query, val1, val2)
- 1 回答
- 0 關(guān)注
- 176 瀏覽
添加回答
舉報
0/150
提交
取消