尝试将数据插入我的 sqlite 数据库时出现以下错误:
"sqlite near "t": syntax error"
我不知道这意味着什么:-(
背景:我mysql_real_escape_string
用来“清理”来自在线表单的数据(表单提示用户将他们的信息输入到文本字段中并按“提交”) - 这非常有效:它允许所有单一和双引号字符被接受并无错误地输入数据库。
接下来,我的 iPhone 应用程序查询这个数据库并解析传入的数据 - 有趣的是,我得到 \" 和 \' 到处都是(如:don\'t 或 \"The Odyssey\" 而不是不要或“奥德赛”)
为了解决这个问题,我使用[stringVar stringByReplacingOccurrencesOfString:@"\\" withString:@""]
- 所以我基本上用无空格替换所有斜线 - 这非常有效(我得到:不要 +“The Odyssey”。)
但是,当我现在尝试将这个新下载和解析的数据写入我的设备上sqlite 数据库时 - 应用程序崩溃了。而且我相当肯定这与所有单引号和双引号、斜杠以及谁知道还有什么有关。
为了测试,我创建了一些不包含任何这些棘手字符的快速虚拟数据,将其插入数据库(在运行时),一切正常——应用程序没有崩溃,并且显示了设备上的 sqlite 数据库一切都很好 - 所以我相当确定我的 sqlite 数据库、我的 sql 语句等没有问题。它必须是下载的数据/字符串仍然以某种方式损坏。
毋庸置疑,我不是 SQL 专家——我基本上知道最低限度的生活,并尝试边走边学。我对此进行了研究,并认为我找到了解决方案,mysql_real_escape_string
但它似乎只能以一种方式工作 - 除了我需要往返解决方案。
任何提示或建议?
=======================================
编辑#1 - 这是我正在使用的代码 - 混合了建议的内容和我在这本 iPhone 书中找到的内容:
NSString *sqlString = [NSString stringWithFormat:@"INSERT OR REPLACE INTO '%@' ('%@', '%@', '%@', '%@') VALUES (?, ?, ?, ?)", tableName, @"Title", @"Source", @"Date", @"StoryCopy"];
NSLog(@"The sql string is = '%@'", sqlString);
const char *sql = [sqlString UTF8String];
sqlite3_stmt *stmt;
int rc = sqlite3_prepare_v2(db, sql, -1, &stmt, nil);
if (rc == SQLITE_OK) {
sqlite3_bind_text(stmt, 0, [sTitle UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 1, [sSource UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 2, [sDate UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 3, [sCopy UTF8String], -1, SQLITE_TRANSIENT);
}
if (sqlite3_step(stmt) != SQLITE_DONE) {
NSAssert(0, @"Error updating table!!!");
}
sqlite3_finalize(stmt);
问题在于它将值插入到不应插入的列中。它有点到处都是。有什么想法吗?