2013-05-07 66 views
0

此代碼在iphone,ipad模擬器中都可以很好地工作在xcode 4.5xcode 4.6之間。也可以使用xcode 4.5中的設備完美調試。 但是當我試圖在xcode 4.6.2中調試設備時,則顯示此錯誤。Sqlite在ios SDK中顯示EXC_BAD_ACCESS

這是查詢

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; 
    } 

回答

2

男孩你好即一些危險的碼的代碼;無保護的查詢組合+解析! SQL注入攻擊的可能性很高!

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

當您撰寫您的insertQuery並將其傳遞給executeNonQuery:時,如果該字符串包含任何?字符,則需要將另一個參數傳遞給該方法。

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

BOOM

如果你要組成一個完整的查詢到您的insertQuery字符串,那麼你就需要將它傳遞給任何能夠直接評估SQL。看看這個調用,我敢打賭,executeNonQuery:arguments:將再次傳遞字符串和/或參數以將參數綁定到?

+0

感謝您的答覆..但我仍然混淆請給我一個例子如何直接傳遞查詢[數據庫executenonquery:...] – 2013-05-07 06:57:16

+0

[數據庫executeNonQuery:@「INSERT INTO?VALUES(?,?,? ,?,?,?,?,?,?);「,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」]; //我試過這個我是對的..? – 2013-05-07 07:10:44

+0

這似乎是API的設計方式,是的。 – bbum 2013-05-07 14:56:09