我一直在这里看一些类似的问题,但似乎找不到任何有效的解决方案。
我的应用程序允许用户在UITextField中编写他们想要的任何内容并将其发送到sqlite3数据库。但是,如果它包含撇号,则不会发送它。
我知道在文本字段中放两个撇号可以工作,但这根本不是用户友好的......有什么想法吗?
谢谢!
- (IBAction)saveInfo:(id)sender {
// Prepare the query string.
// If the recordIDToEdit property has value other than -1, then create an update query. Otherwise create an insert query.
NSString *query;
if (self.recordIDToEdit == -1) {
query = [NSString stringWithFormat:@"insert into peopleInfo values(null, '%@', %@)", self.txtFirstname.text, self.txtDate.text];
}
else{
query = [NSString stringWithFormat:@"update peopleInfo set firstname='%@', date=%@ where peopleInfoID=%d", self.txtFirstname.text, self.txtDate.text, self.recordIDToEdit];
}
答案 0 :(得分:1)
永远不要这样做!永远记住小鲍比表: Exploits of a Mom
使用prepared statements将数据插入数据库,不要自己连接/构建语句;看看这里:
您自担风险:您可以使用stringByReplacingOccurrencesOfString:withString:
使用两个单引号来转义每个单引号:
NSString *firstName = self.txtFirstname.text;
firstName = [firstName stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
if (self.recordIDToEdit == -1) {
query = [NSString stringWithFormat:@"insert into peopleInfo values(null, '%@', %@)", firstName, self.txtDate.text];
}
else{
query = [NSString stringWithFormat:@"update peopleInfo set firstname='%@', date=%@ where peopleInfoID=%d", firstName, self.txtDate.text, self.recordIDToEdit];
}
答案 1 :(得分:0)
你应该总是做某种"字符串转义"连接查询时。至于安全性,请查找SQL注入攻击。