我试图使用Elixir Ecto.Adapters.SQL.query插入postgres,查询由字符串数组组成。但它确实插入了postgres,但不是作为字符串列表,而是单个字符串。 即如果标签包含[" abc"," xyz"],它会在postgres中插入为abcdef而不是数组。
重要的是,我没有使用架构或迁移。简单的原始查询。
需要在postgres中插入的地图
response_map= %{"description" => "des33", "id" => 158,
"inserted_at" => "2017-06-09T10:19:03.904572", "tags" => ["abc","xyz"],
"title" => "test 1", "updated_at" => "2017-06-09T10:19:03.904578"}
我使用的代码
%{"description" => desc, "id" => id, "title" => title, "tags" => tags}=response_map
Ecto.Adapters.SQL.query!(Repo,"insert into test values ('#{id}','#{title}','#{desc}','#{tags}')")
答案 0 :(得分:0)
您绝不应在查询中使用字符串插值。您正在打开自己的SQL注入攻击。使用参数化查询,您将修复SQL注入,并使其适用于数组:
Ecto.Adapters.SQL.query!(Repo, "insert into test values ($1, $2, $3, $4)", [id, title, desc, tags])