0

アプリケーションでレコードを削除しようとしていますが、うまくできませんでした。

これがコードスニペットです。

if(trackingHistory != nil){
    for (NSString *trkNum in trackingHistory) {
        if(trkNum == NULL){
            continue;
        }
        if (sqlite3_open(dbpath, &database) == SQLITE_OK)
        {
            NSString *querySQL = [NSString stringWithFormat: @"delete from TRACK_IT where TRACKING_NUMBER=\"%@\"",trkNum];
            const char *query_stmt = [querySQL UTF8String];
            sqlite3_prepare_v2(database, query_stmt,-1, &statement, NULL);
            if (sqlite3_step(statement) == SQLITE_DONE)
            {
                NSLog(@"deleted record");
                //return YES;
            } else {
                NSLog(@"Failed to delete record");
                // return NO;
            }
            sqlite3_reset(statement);
        }
    }
}

何が問題なのか教えてください。

4

3 に答える 3

2

クエリ文字列は、単一引用符ではなく二重引用符を使用しているようです:

NSString *querySQL = [NSString
    stringWithFormat: @"delete from TRACK_IT where TRACKING_NUMBER=\"%@\"",trkNum];
//                                                                  ^   ^
//                                                                  |   |
//                                                              Here and Here

一重引用符に置き換えると、この構文エラーが修正されます。

NSString *querySQL = [NSString
    stringWithFormat: @"delete from TRACK_IT where TRACKING_NUMBER='%@'",trkNum];

ただし、trkNum独自のプログラムに組み込まれている場合を除き、レコードを削除するこの方法を使用しないでください。データがユーザーからのものである場合、アプリを SQL インジェクション攻撃にさらすことになります

于 2013-06-12T15:57:53.117 に答える