sql - 使用语法错误更新 postgresql

标签 sql postgresql sql-update

我有一个名为 test 的表,它有 4 列:

id     INT
v_out  INT
v_in   INT
label  CHARACTER

我正在尝试使用以下查询更新表格:

String sql = "
update
    test
set
    v_out = temp.outV
    , v_in = temp.inV
    , label = temp.label
from (
        values
            (1,234,235,'[abc]') // these value are read from other places
            ,(2,234,5585,'[def]') //[abc] = object.toString();
    ) as temp (e_id, outV, inV, label)
where
    id = temp.e_id;

当我执行它时,我得到了错误: org.postgresql.util.PSQLException:错误:“[”处或附近的语法错误

在出现此错误之前,我已经更新了 3000 多行。

那么这是什么原因造成的呢?是因为“[”这个字符吗? 这是原始表格:

create table edges(
 id serial not null primary key,
 vertex_out int, 
 vertex_in int, 
 label character varying(255),
 constraint fk_vertex_out foreign key (vertex_out) references vertices(id) on delete cascade,
 constraint fk_vertex_in foreign key (vertex_in) references vertices(id) on delete cascade
);

最佳答案

这里最有可能的问题是 SQL 查询中的字符串插值(这是一个非常的坏习惯)。

看这个例子:

  values
      (1,234,235,'[abc]''),
      (2,234,5585,'[def]')

第一个对象名称中的 ' 符号违反了字符串边界,导致 错误:第二行“[”: 处或附近的语法错误。

您可以在互联网上搜索SQL Injection 以获取有关此问题的详细信息。

关于sql - 使用语法错误更新 postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25061815/

相关文章:

sql - 表 A 或表 B 的外键

arrays - 如何在 Postgresql 中获取数组的 JavaScript/JSON 数组?

sql - 从另一个表更新随机行 SQL Server 2014

mysql - Perl - 更新没有主键的mysql表

php - 重新排序 MySQL

java - 如何从 JDBC 查询中获取所有元素

mysql - 统计区、地区员 worker 数查询

sql - 用具有嵌入式SQL的旧Delphi代码执行TDD的好方法是什么

sql - Postgres 中为一行存储一堆任意 bool 值的最佳方法是什么?

来自另一个选择的 MySQL 更新