亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在PostgreSQL中插入帶有單引號的文本

在PostgreSQL中插入帶有單引號的文本

繁星coding 2019-06-09 15:21:32
在PostgreSQL中插入帶有單引號的文本我有張桌子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轉義機制?
查看完整描述

3 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

轉義單引號'把它們翻一番->''當然,這是標準的方式和工作方式。

'user's log'     -- incorrect syntax (unbalanced quote)
'user''s log'

在舊版本中,或者如果您仍然運行standard_conforming_strings = off或者,通常情況下,如果您用E宣布POSIX轉義字符串語法,您也可以使用反斜杠逃跑。\:

E'user\'s log'

但這通常并不可取。
如果您必須處理多個單引號或多層轉義,則可以避免在PostgreSQL中引用地獄美元引號:

'escape '' with '''''$$escape ' with ''$$

為了進一步避免美元報價之間的混淆,在每對單引號上添加一個唯一的標記:

$token$escape ' with ''$token$

可以嵌套任意數量的級別:

$token2$Inner string: $token1$escape ' with ''$token1$ is nested$token2$

注意如果$字符在您的客戶端軟件中應該有特殊的含義。你可能還得逃離它。對于psql或pgAdmin這樣的標準PostgreSQL客戶端,情況并非如此。

這對于編寫plpgsql函數或即席SQL命令非常有用。但是,它不能減輕使用準備好的語句或其他方法來防止在您的應用程序中進行SQL注入的需要,因為用戶輸入是可能的。@Craig的回答會有更多的報道。更多詳情:


查看完整回答
反對 回復 2019-06-09
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

這是很多不好的世界,因為你的問題意味著你可能有裂口。SQL注入你申請表上的漏洞。

您應該使用參數化語句。對于Java,請使用PreparedStatement帶占位符..你說你不想使用參數化語句,但你沒有解釋為什么坦率地說,這必須是一個非常好的理由不使用它們,因為它們是最簡單、最安全的方法來解決您正在試圖解決的問題。

看見防止Java中的SQL注入..別這樣鮑比下一個受害者。

PgJDBC中沒有用于字符串引用和轉義的公共函數。這在一定程度上是因為它可能會讓人覺得這是個好主意。

那里內置引號函數quote_literalquote_ident在PostgreSQL中,但是它們是PL/PgSQL使用EXECUTE..這幾天quote_literal大多被淘汰EXECUTE ... USING,也就是參數化版本,因為它是更安全更容易..您不能將它們用于這里解釋的目的,因為它們是服務器端函數。


想象一下,如果你得到了這個值,會發生什么?');DROP SCHEMA public;--來自惡意用戶。你會產生:

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

它分解為兩個語句和一個被忽略的注釋:

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

喔,你的數據庫來了。


查看完整回答
反對 回復 2019-06-09
  • 3 回答
  • 0 關注
  • 4623 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號