1

我想从我的 Go 应用程序执行以下查询

SELECT hour, count 
FROM location_counts 
WHERE distance(point, 'POINT(-80.205 26.14)') <= 100

我将传入POINT(-80.205 26.14)and100值,我不太确定如何以POINT...安全的方式包含参数。当我尝试将其作为参数传递时,如下所示:

rows, err := g.DB.Query(
    "select hour, count from location_counts where distance(point, '?') <= ?",
    "POINT(-80.205 26.14)",
    100,
)

它抛出错误:

SQLActionException[SQLParseException: 无法将 'POINT(-80.205 26.14)' 转换为 double 类型]

如果我将值直接放入字符串中,它可以工作,但我会为 SQL 注入漏洞敞开心扉。

如何POINT...在查询中安全地包含该值?

4

1 回答 1

2

删除占位符问号的引号应该可以修复它,例如:

rows, err := g.DB.Query( "select hour, count from location_counts where distance(point, ?) <= ?", "POINT(-80.205 26.14)", 100, )

永远不应引用占位符,因为它们将直接被类型化参数替换。

于 2017-12-07T17:52:43.523 回答