Я пишу приложение для iPhone, которое связывается с базой данных SQLite, но у меня возникла небольшая проблема. Всякий раз, когда я пытаюсь запросить информацию, основанную на условии, которое содержит апостроф, результаты не возвращаются .... даже если существует результат, который соответствует запрошенному условию. Позвольте мне привести некоторые подробности ...
Таблица SQLite
Row - Column1 - Столбец2 ---------
- Данные испытаний - 001
- Данные пользователя - 002
Код Objective-C
//Create the sql statement
sqlite3_stmt *sqlStatement;
//Create the name of the category that will be passed in
NSString *categoryName = @"User's Data";
//Create the rest of the SQL query
NSString *sqlQuery = "SELECT * FROM theTableName WHERE Column1 = ?";
//If there are no errors in the SQL query
if (sqlite3_prepare_v2(theDatabase, sqlQuery, -1, &sqlStatement, nil) == SQLITE_OK)
{
//Bind the category name to the sql statement
sqlite3_bind_text(sqlStatement, 1, [categoryName UTF8String], -1, SQLITE_TRANSIENT);
//While there are rows being returned
while (sqlite3_step(sqlStatement) == SQLITE_ROW)
{
//Retrieve row data
}
}
else
{
//Save error message to the application log and terminate the app
NSAssert1(0,@"Error: Failed to prepare the SQL statement with message '%s'.", sqlite3_errmsg(database));
}
//Reset the sql statement
sqlite3_reset(sqlStatement);
Я наполовину новичок в цели C, поэтому моя первая мысль при написании этого кода заключалась в том, чтобы очистить вводимые пользователем данные. Но после некоторого исследования я прочитал, что вызовы sqlite3_bind обеспечивают необходимую санитарную обработку для вас. Но всякий раз, когда код выполняется, цикл while пропускается сразу, потому что строки не возвращаются. Он должен вернуть вторую строку из таблицы базы данных. Если я копирую / вставляю точный тот же запрос SQL в управляющую программу SQL (я использую SQLite Manager ) (и, конечно, с необходимой обработкой запросов), он возвращает правильные данные.
Я потратил много времени, пытаясь отлаживать это сам, и еще больше времени, пытаясь найти в Интернете аналогичную проблему, которая объясняется и решается, но безрезультатно. На данный момент я просто отключил способность пользователя вводить апостроф на виртуальной клавиатуре iPhone. Но эту функцию я бы хотел включить в свой готовый продукт. Может кто-нибудь здесь предложить мне какие-нибудь полезные советы? Любая помощь будет принята с благодарностью.