在PostgreSQL中用单引号插入文本


Answers

这是如此之多的糟糕的世界,因为你的问题意味着你的应用程序中可能存在空洞的SQL注入漏洞。

你应该使用参数化语句。 对于Java,使用带占位符的PreparedStatement 。 你说你不想使用参数化语句,但是你不解释原因 ,坦率地说它不应该是一个很好的理由不使用它们,因为它们是解决你试图解决问题的最简单,最安全的方法解决。

请参阅在Java中防止SQL注入 。 不要成为Bobby的下一个受害者。

PgJDBC没有公共职能用于字符串引用和转义。 部分原因是它可能使它看起来像一个好主意。

PostgreSQL中有内置的引用函数quote_literalquote_ident ,但它们是使用EXECUTE PL/PgSQL函数。 现在, quote_literal大部分都被EXECUTE ... USING废弃,这是参数化的版本 ,因为它更安全更简单 。 你不能将它们用于你在这里解释的目的,因为它们是服务器端的功能。

想象一下,如果你得到的价值');DROP SCHEMA public;--来自恶意用户会发生什么。 你会产生:

insert into test values (1,'');DROP SCHEMA public;--');

分解为两个语句和一个被忽略的注释:

insert into test values (1,'');
DROP SCHEMA public;
--');

哎呀,那里有你的数据库。

Question

我有一个表test(id,name)

我需要插入像: user's log'my user'customer's

 insert into test values (1,'user's log');
 insert into test values (2,''my users'');
 insert into test values (3,'customer's');

如果我运行上述任何一个语句,则会出现错误。

如果有任何方法可以正确执行此操作,请分享。 我不想要任何准备好的陈述。

是否有可能使用sql转义机制?







在postgresql中,如果你想在其中插入值,那么你必须给出额外的'

 insert into test values (1,'user''s log');
 insert into test values (2,'''my users''');
 insert into test values (3,'customer''s');