2011-03-31 102 views
5

我想根據用戶提供的文本在SQLite數據庫中創建一個表。一切工作正常,除了當我試圖在文本內添加一個撇號(這是新的表名)。經過研究,我確定我在做什麼是很容易受到注入是不是最好的做法:用撇號安全地插入SQLite數據庫的數據

const char *sqlStr = [[NSString stringWithFormat:@"CREATE Table '%@' ('Name' 'char(50)','ID' 'integer')",theString]UTF8String]; 

所以我試圖找到一種方法,以允許包含在表名撇號,安全地插入值存入數據庫。我已經閱讀過有關綁定值的信息,但是可以使用'CREATE TABLE'語句嗎?或者僅當您將數據插入到已經存在的表中時?

感謝您的幫助。

+0

我不會建議允許用戶或命名列的其他一些動態的方式。如果有什麼名稱的列custom1。 – Joe 2011-03-31 13:35:02

+0

嗨喬,我想讓用戶在數據庫中創建表名稱,而不是列,這些不會改變。使用撇號時,我只是不知道這樣做的最佳方式。 – Ryan 2011-03-31 13:44:06

+1

如果您使用[FMDB](http://github.com/ccgus/FMDB),那麼它將在執行您的SQL(提供您使用它的API進行替換)之前爲您處理所有必要的轉義。我*高度*建議您檢查一下。 – 2011-03-31 15:19:05

回答

10

documentation

字符串常量被包圍在單引號(')的字符串形成。字符串中的單引號可以通過將兩個單引號放在一行中進行編碼 - 就像在Pascal中一樣。

這樣:

[theString stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; 
+0

我已經用它來插入值,但是當我試圖從數據庫中檢索它時,它給了我空行。像''Select *從TABLE WHERE Name ='tom''s'「' – 2017-06-26 10:45:33