我找不到一个很好的例子来说明将文本查询的字符串部分与值连接起来的正确方法。例如: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)它告诉我元组是问题之一。如果我首先将参数转换为字符串,我会得到 (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)我知道我可以将值转换为字符串并使用 连接"STRING" + var + "STRING",但与 python 版本相比,这似乎非常混乱。Go 中 Python 代码的等价物是什么?具体包括元组部分,并连接一个字符串和一个整数。
1 回答
函数式编程
TA贡献1807条经验 获得超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 关注
- 162 浏览
添加回答
举报
0/150
提交
取消