我正在尝试使用postgres返回纯json的特性,因此我在Ecto模型中添加了一个方法,该方法执行查询,返回想要的json。
defmodule BoardApi.Board do
use Ecto.Model
def json_by_id(id) do
sql = "SELECT row_to_json(json) AS result FROM (SELECT array_agg(users) AS users FROM users WHERE id=#{id}) json;"
result = Ecto.Adapters.SQL.query(BoardApi.Repo, sql, [])
return List.first(result.rows) |> Tuple.to_list |> List.first
end我的问题是,这是否具有sql注入潜力,是否有可能使用类似准备好的语句?
发布于 2015-02-17 17:16:37
你在找Ecto.Adapters.SQL.query/4。SQL语句可以有数值变量,如$1、$2、.,然后使用函数调用的第三个参数在列表中传递这些参数。
你可以用以下方式达到你想要的目的:
defmodule BoardApi.Board do
use Ecto.Model
def json_by_id(id) do
sql = "SELECT row_to_json(json) AS result FROM (SELECT array_agg(users) AS users FROM users WHERE id=$1) json;"
result = Ecto.Adapters.SQL.query(BoardApi.Repo, sql, [id])
# `return` is not valid Elixir
result.rows |> hd |> elem(0)
end
endhttps://stackoverflow.com/questions/28566821
复制相似问题