我正在尝试使用 sqlite3 为 iphone 应用程序创建登录屏幕来存储登录凭据。
以下是我用来处理身份验证的函数:
-(void) enter
{
const char *dbpath = [databasePath UTF8String];
sqlite3_stmt *statement;
if (sqlite3_open(dbpath, &DBLogin) == SQLITE_OK)
{
NSLog(@"Connected to Database");
NSString *querySQL = [NSString stringWithFormat:@"SELECT id FROM User WHERE id=\"%@\"",login.text];
NSString *s = password.text;
const char *query_stmt = [querySQL UTF8String];
NSLog(@"String is %s",query_stmt);
NSLog(@"Pass is %@",s);
if (sqlite3_prepare_v2(DBLogin,query_stmt, -1, &statement, NULL) ==!SQLITE_NULL)
{
NSLog(@"Executed Correctly");
querySQL = [NSString stringWithFormat:@"SELECT password FROM User WHERE password=\"%@\"",password.text];
query_stmt = [querySQL UTF8String];
const char *f= [login.text UTF8String];
NSLog(@"String is %s",query_stmt);
NSLog(@"Pass is %@",s);
// const char *l = [login.text UTF8String];
// sqlite3_bind_text(statement, 1, query_stmt, -1, SQLITE_STATIC);
if (sqlite3_prepare_v2(DBLogin,query_stmt, -1, &statement, NULL) == !SQLITE_NULL)
{
if(sqlite3_bind_text(statement, 1,f , -1, SQLITE_STATIC))
status.text= @"Congratulations";
}
else
{
NSLog(@"error");
}
}
else
{
NSLog(@"Failed");
status.text =@"ERROR!";
}
}
}
这是我的数据库架构:
CREATE TABLE User (id varchar(20) PRIMARY KEY, password varchar(20));
我认为我传递login.text
or细节的方式有问题password.text
。根据NSLog
它传递了正确的值,但似乎无法检查它是否是正确的输入。似乎认为一切都很好,并且status.text = Congratulations
无论我输入什么都会显示。
我不知道如何解决这个问题,如果我能得到任何帮助,我将不胜感激。如果需要,我可以提供更多信息。提前致谢!