gpt4 book ai didi

ios - Sqlite 在 ios SDK 中显示 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-11-28 22:34:45 26 4
gpt4 key购买 nike

此代码在 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;
}

最佳答案

男孩你好,这是一些危险的代码;不 protected 查询组合 + 解析! SQL 注入(inject)攻击潜力很高!

问题是您在解释动态生成的字符串内容时没有考虑字符串中的内容。 Xcode 的版本无关紧要。

当您编写 insertQuery 然后将其传递给 executeNonQuery: 时,如果该字符串包含任何 ? 字符,那么这将需要另一个将参数传递给该方法。

即说 [[d objectForKey:@"ID"]intValue] 返回 @"fd?Edfds???sdfefsads?f?";这将被解释为在您的 executeNonQuery: 方法中需要六个参数。

繁荣

如果您要将一个完整的查询组合到您的 insertQuery 字符串中,那么您需要将它传递给任何可以直接计算 SQL 的对象。查看调用,我敢打赌 executeNonQuery:arguments: 将再次传递字符串和/或参数以将参数绑定(bind)到 ?

关于ios - Sqlite 在 ios SDK 中显示 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16411748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com