Postgrex& amp;外生

时间:2015-02-17 16:59:31

标签: elixir ecto

我正在尝试使用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注入潜力,是否有可能使用类似预处理语句?

1 个答案:

答案 0 :(得分:4)

您正在寻找the documentation for Ecto.Adapters.SQL.query/4

您可以通过以下方式实现目标:

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
end