Вы уверены, что любой из ваших вызовов SQLite был успешным?Вы должны инициализировать result
в nil
, чтобы ваша функция возвращала nil
, если обнаружены какие-либо ошибки.
Три (вероятно, связанные) проблемы с вашим кодом:
Индекс к sqlite3_column_text
должен начинаться с нуля;вы передаете 2
, который должен ссылаться на третий столбец.Вы, вероятно, хотите передать 1
.Начиная с документов :
... второй аргумент - это индекс столбца, для которого должна быть возвращена информация.Крайний левый столбец набора результатов имеет индекс 0.
Вы действительно не должны использовать SELECT *
.Укажите нужные столбцы!
Вы должны специализировать свой запрос по значениям привязки, а не по конкатенации строк!Ваш код изобилует возможностью SQL-инъекций (не говоря уже о неправильных запросах).
Например (без проверки ошибок):
const char *query = "SELECT * FROM ? WHERE ?=?";
sqlite3_stmt *compiledQuery;
sqlite3_prepare_v2(database, query, -1, &compiledQuery, NULL);
sqlite3_bind_text(compiledQuery, 1, "Lessons", -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledQuery, 2, "Chrono", -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledQuery, 3, "0001", -1, SQLITE_TRANSIENT);
Обратите внимание, чтоиндекс здесь основан на 1 (я не знаю, почему они это делают).Из документов :
Второй аргумент - это индекс параметра SQL, который нужно установить.Крайний левый параметр SQL имеет индекс 1.