计算距离时如何传入位置参数?

How to pass a location parameter in when calculating distance?

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

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

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

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

它抛出错误:

SQLActionException[SQLParseException: Cannot cast 'POINT(-80.205 26.14)' to type double]

如果我将值直接放入字符串中,它会起作用,但我会为 SQL 注入漏洞打开自己的大门。

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

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

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

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