Могу ли я использовать параметры для имени таблицы в sqlite3? - PullRequest
13 голосов
/ 03 мая 2011

У меня странное чувство о sqlite3 параметров , которое я хотел бы раскрыть вам.

Это мой запрос и сообщение об ошибке:

#query
'SELECT id FROM ? WHERE key = ? AND (userid = '0' OR userid = ?) ORDER BY userid DESC LIMIT 1;'
#error message, fails when calling sqlite3_prepare()
error: 'near "?": syntax error'

В моем коде это выглядит так:

// Query is a helper class, at creation it does an sqlite3_preprare()
Query q("SELECT id FROM ? WHERE key = ? AND (userid = 0 OR userid = ?) ORDER BY userid DESC LIMIT 1;");
// bind arguments
q.bindString(1, _db_name.c_str() ); // class member, the table name
q.bindString(2, key.c_str()); // function argument (std::string)
q.bindInt   (3, currentID); // function argument (int)
q.execute();

У меня такое ощущение, что я не могу использовать sqlite parameters для имени таблицы, но не могу найти подтверждение в Sqlite3 C API .

Знаете ли вы, что не так с моим запросом?
Нужно ли предварительно обрабатывать оператор SQL, чтобы включить имя таблицы перед подготовка запроса?

Ответы [ 2 ]

10 голосов
/ 03 мая 2011

Оооооо, следовало бы более внимательно посмотреть на SO.

Ответы:
- Параметры SQLite - Не разрешать имя таблицы в качестве параметра
- Имя таблицы переменных в sqlite

Они предназначены для Python, но я думаю, то же самое относится и к C ++.

ТЛ; др

Вы не можете передать имя таблицы в качестве параметра.
Если у кого-нибудь есть ссылка в документации по SQLite, где у меня есть подтверждение, я с радостью приму ответ.

4 голосов
/ 24 апреля 2013

Я знаю, что это уже очень старо, но так как ваш запрос - просто строка, вы всегда можете добавить имя таблицы, например, в C ++:

std::string queryString = "SELECT id FROM " + std::string(_db_name);

или в объективе-C:

[@"SELECT id FROM " stringByAppendingString:_db_name];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...