首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Postgrex & Ecto一起准备的发言稿

与Postgrex & Ecto一起准备的发言稿
EN

Stack Overflow用户
提问于 2015-02-17 16:59:30
回答 1查看 2K关注 0票数 3

我正在尝试使用postgres返回纯json的特性,因此我在Ecto模型中添加了一个方法,该方法执行查询,返回想要的json。

代码语言:javascript
复制
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注入潜力,是否有可能使用类似准备好的语句?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-17 17:16:37

你在找Ecto.Adapters.SQL.query/4。SQL语句可以有数值变量,如$1$2、.,然后使用函数调用的第三个参数在列表中传递这些参数。

你可以用以下方式达到你想要的目的:

代码语言:javascript
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28566821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档