2016-03-01 65 views
0

我使用sqlite-porter与importSqlToDb()。但现在我遇到了单个配额或字符串中带有反斜杠的问题。有没有解决方案?我想写这样的sql查询:“INSERT INTO Artist(Id,Title)VALUES('1','Fred's ball \ shoe');”;并且不能使用参数。cordova-sqlite-porter importSqlToDb sql注入

在此先感谢价值观

回答

0

单引号应该在SQLite的(see here)采用双单引号进行转义。反斜杠和文字一样好。所以,你应该使用:

"INSERT INTO Artist(Id,Title) VALUES ('1','Fred''s ball \ shoe');"; 

example projectcordova-sqlite-porter包含complex example这说明在值字符串使用单引号和反斜杠,例如:

INSERT INTO [Artist] ([ArtistId], [Name]) VALUES (88, 'Guns N'' Roses'); 

INSERT INTO [Track] ([TrackId], [Name], [AlbumId], [MediaTypeId], [GenreId], [Composer], [Milliseconds], [Bytes], [UnitPrice]) VALUES (3435, 'Cavalleria Rusticana \ Act \ Intermezzo Sinfonico', 302, 2, 24, 'Pietro Mascagni', 243436, 4001276, 0.99); 
+0

你好,是的,这是正确的!但是我从一个服务中获得这个字符串,这个字符串就像'Guns N'Roses'一样。所以,如果我使用参数创建sql查询,就不会有问题,因为它会处理单引号。我不能使用正则表达式来替换单引号,因为我从服务接收到的这个字符串可以包含像“

bla bla this
”这样的html标签。有没有一个函数编辑这个字符串就像我会用参数插入? – user1861065

+0

无论你如何做,你都需要在数值中加倍转义单引号。即使它们包含在HTML中,也可以使用正则表达式。它只需要忽略属性中的单引号。像这样:'/>(?:[^ <'] *(')[^ <'] *)* DaveAlden