gpt4 book ai didi

ios - SQLite 插入错误的值。开发者

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

我正在熟悉 iOS 上的 SQLite。我正在尝试进行简单的用户注册,但是年龄值 (NSInteger) 总是变成一些大的负数,例如 -1073752692。这是我的注册码:

    - (User*) registerUser:(NSString *) firstname
lastname:(NSString *) lastname
age:(NSInteger) Age
email:(NSString *) email
password:(NSString *) password
picture:(NSString *) picture
{
User* user = nil;
NSString *sql = [NSString stringWithFormat:@"INSERT INTO User (firstname, lastname, age, email, password, picture) VALUES (\"%@\", \"%@\", \"%d\", \"%@\", \"%@\", \"%@\")", firstname, lastname, Age, email, password, picture];

sqlite3_stmt *insert;
int result = sqlite3_prepare_v2(self.db, [sql UTF8String], -1, &insert, NULL);
if (result == SQLITE_OK) {
sqlite3_step(insert);
user = [[User alloc]init];
user.firstname = firstname;
user.lastname = lastname;
user.age = Age;
user.password = password;
user.picture = picture;
NSLog(@"Successful registration!");

} else {
NSLog(@"Error: insert prepare statement failed: %s.", sqlite3_errmsg(self.db));
}
sqlite3_finalize(insert);
return user;

}

我想不出为什么会这样。我以前经常使用 Postgres,从来没有遇到过这样的问题。

谢谢。

最佳答案

documentation说你不应该将 NSInteger%d 一起使用。

在任何情况下,为了防止像这样的格式化问题和 SQL 注入(inject)攻击(任何包含 " 的字符串都会使您的代码崩溃),您应该使用参数:

NSString *sql = @"INSERT INTO User(firstname,lastname,age,email,password,picture)"
" VALUES (?,?,?,?,?,?)";
int result = sqlite3_prepare_v2(self.db, [sql UTF8String], -1, &insert, NULL);
if (result == SQLITE_OK) {
sqlite3_bind_text(insert, 1, [firstname UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(insert, 2, [lastname UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_int (insert, 3, Age);
sqlite3_bind_text(insert, 4, [email UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(insert, 5, [password UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(insert, 6, [picture UTF8String], -1, SQLITE_TRANSIENT);
result = sqlite3_step(insert);
...

(还需要检查sqlite3_step的返回值。)

关于ios - SQLite 插入错误的值。开发者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24097020/

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