簡體   English   中英

Sqlite在ios SDK中顯示EXC_BAD_ACCESS

[英]Sqlite shows EXC_BAD_ACCESS in ios SDK

此代碼在xcode 4.5xcode 4.6中的iphone,ipad模擬器中完美運行。也可以在xcode 4.5完美地與設備進行調試。 但是當我嘗試在xcode 4.6.2中調試設備時,此錯誤顯示。

這是查詢

NSString *insertQuery=[NSString stringWithFormat:@"Insert into %@ (ID,Question,Answer,Option1,Option2,Option3,Explanation,ImageName,Used) values(%d,'%@','%@','%@','%@','%@','%@','%@','%@')",table,[[d objectForKey:@"ID"]intValue],[d objectForKey:@"Question"],[d objectForKey:@"Answer"],[d objectForKey:@"Option1"],[d objectForKey:@"Option2"],[d objectForKey:@"Option3"],[d objectForKey:@"Explanation"],[d objectForKey:@"ImageName"],@"N"];
                        NSLog(@"insert query-%@",insertQuery);
                        [database executeNonQuery:insertQuery];

這是顯示EXC_BAD_ACCESS錯誤的代碼

- (BOOL)executeNonQuery:(NSString *)sql, ... 
    {
    va_list args;
    va_start(args, sql);

    NSMutableArray *argsArray = [[NSMutableArray alloc] init];
    NSUInteger i;
    for (i = 0; i < [sql length]; ++i)
         {
        if ([sql characterAtIndex:i] == '?')

                   [argsArray addObject:va_arg(args, id)]; //This line shows error.
    }

    va_end(args);

    BOOL success = [self executeNonQuery:sql arguments:argsArray];

    [argsArray release];
    return success;
   }

男孩,你好,這是一些危險的代碼; 不受保護的查詢組合+解析! SQL注入攻擊潛力很高!

問題是您正在解釋動態生成的字符串內容而不考慮字符串中的內容。 Xcode的版本無關緊要。

當你insertQuery然后將它傳遞給executeNonQuery: ,如果該字符串包含任何? 然后,這將需要將另一個參數傳遞給該方法。

[[d objectForKey:@"ID"]intValue]返回@"fd?Edfds???sdfefsads?f?" ; 這將被解釋為在您的executeNonQuery:方法中需要六個參數。

繁榮

如果要對insertQuery字符串進行完整的查詢,則需要將其傳遞給可以直接評估SQL的任何內容。 看看這個電話,我敢打賭, executeNonQuery:arguments:會再次傳遞字符串和/或參數來將參數綁定到? 秒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM