Безопасно вмъкване на данни в SQLite база данни с апостроф

Опитвам се да създам таблица в SQLite база данни въз основа на предоставен от потребителя текст. Всичко работеше правилно, освен когато се опитах да добавя апостроф в текста (което трябваше да бъде новото име на таблицата). След проучване реших, че това, което правя, не е най-добрата практика, тъй като е уязвимо за инжектиране:

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

Така че се опитвам да намеря начин да позволя апострофите да бъдат включени в името на таблицата и безопасно да вмъкна стойността в базата данни. Четох за обвързващи стойности, но възможно ли е това с оператора „CREATE TABLE“? Или само когато вмъквате данни във вече съществуваща таблица?

Благодаря за вашата помощ.


person Ryan    schedule 31.03.2011    source източник
comment
Не бих препоръчал разрешаването на потребителя или някакъв друг динамичен начин за именуване на колони. Ако има нещо, име на колоната custom1.   -  person Joe    schedule 31.03.2011
comment
Здравей Джо, искам да позволя на потребителя да създаде името на таблицата в базата данни, а не колоните, те няма да могат да се променят. Просто не знам кой е най-добрият начин да направя това, когато работя с апостроф.   -  person Ryan    schedule 31.03.2011
comment
Ако използвате FMDB, тогава той ще се справи с цялото необходимо екраниране вместо вас, преди да изпълни вашия SQL (при условие използвате неговия API за заместване). Горещо ви препоръчвам да го разгледате.   -  person Dave DeLong    schedule 31.03.2011


Отговори (1)


@ DSM: Всъщност се интересувам от обратно инженерство на това. Използвайки вашия пример, искам да извлека низа y = x² exp(-x) от фигурата example1.ps
person jnic    schedule 31.03.2011
comment
Използвал съм това за вмъкване на стойности, но когато се опитах да го извлека от DB, ми дава празен ред. като "Select * From TABLE WHERE Name = 'tom''s'" - person User_1191; 26.06.2017
comment
@Потребител_1191# Do this instead t = ("tom's",) c.execute('SELECT * FROM stocks WHERE symbol=?', t) - person Peter Prescott; 20.11.2019