无法将包含撇号的用户输入发送到sqlite3-database(Obj-C)

时间:2017-02-17 07:07:58

标签: ios objective-c sqlite

我一直在这里看一些类似的问题,但似乎找不到任何有效的解决方案。

我的应用程序允许用户在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];
    }

2 个答案:

答案 0 :(得分:1)

永远不要这样做!永远记住小鲍比表: Exploits of a Mom

使用prepared statements将数据插入数据库,不要自己连接/构建语句;看看这里:

Objective-C: Fast SQLite Inserts with Prepared Statements for Escaped Apostrophes and SQL Injection Protection

您自担风险:您可以使用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注入攻击。