我有一個查詢從文本框中獲取文本並將其輸入到數據庫中。將撇號添加到查詢
它工作正常,如果該值是一樣的東西Taylor
但錯誤時,它的O'Neill
,因爲那一撇給了一個語法錯誤unclosed quotation mark
有沒有辦法添加O'Neill
與撇號仍然存在的數據庫?
我不想用雙單引號替換它,我希望將它放入數據庫中,如圖所示。
感謝
我有一個查詢從文本框中獲取文本並將其輸入到數據庫中。將撇號添加到查詢
它工作正常,如果該值是一樣的東西Taylor
但錯誤時,它的O'Neill
,因爲那一撇給了一個語法錯誤unclosed quotation mark
有沒有辦法添加O'Neill
與撇號仍然存在的數據庫?
我不想用雙單引號替換它,我希望將它放入數據庫中,如圖所示。
感謝
如果使用雙單引號,你不會雙單引號在你的數據庫中結束。您將以結尾,只有一個單引號。
的雙人間單引號只是一種方式ESCAPE一個單引號在SQL語句。所以,當你做一個:
> insert into your_table (name) values ('O''neil');
值O'neil
實際上將在數據庫中插入。
如果您的數據庫是PostgreSQL,還有其他操作字符串的方法。例如使用$$
:
> insert into your_table (name) values ($$O'neil$$);
將在數據庫中插入O'neil
。
您可以通過將其翻一番來逃脫撇號(''
) - 將插入單個撇號。
因此,插入O''Neill
將導致O'Neill
插入到數據庫中。
但是,您需要這樣做的事實表明您正在使用可供SQL Injection Attacks使用的嵌入式SQL。
如果你使用parameterized queries,你將不會變得脆弱,你不需要訴諸逃避撇號。
他/她在提問中提到過。 – 2010-11-25 18:24:01
@Pablo - 轉義_will_將單引號插入數據庫。 – Oded 2010-11-25 18:25:01
您可能想要查看第4步。使用命令參數進行SQL查詢的this document by Microsoft patterns & practices。這不僅可以解決您的報價問題,還可以防止SQL注入攻擊和其他非常不利的事情發生。
你可以用雙''提交你的SQL查詢就好了,數據庫識別出逃逸caracter並且只保存一個。
爲什麼你不想要雙單引號解決方案?
您可以發佈您用於將數據插入數據庫的代碼嗎? – Oded 2010-11-25 18:21:49