SOCI rowset<row> странная ошибка
Я недавно установил SOCI библиотеку для своего проекта, потому что она требует работы с базой данных SQLite. Я пытался получить набор строк, но я получил странную ошибку:
"c:\mingw\include\soci\exchange-traits.h:35:5: error: incomplete type 'soci::details::exchange_traits<soci::row>' used in nested name specifier".
Я понятия не имею, что не так с моим кодом... строка, которая делает эту ошибку:
soci::rowset<> results = (sql.prepare << "SELECT * from games where user_name='" << user.getName() << "'");
Кстати, я использую самую последнюю версию SOCI. более широкая часть кода:
soci::session& sql = conn.getSession();
soci::rowset<> results = (sql.prepare << "SELECT * from games where user_name='" << user.getName() << "'");
for(soci::rowset<>::const_iterator it = results.begin(); it != results.end(); ++it)...
1 ответ
Вы должны указать тип soci::rowset
потому что это шаблонный тип. Так, например, если вы select
целочисленный столбец, вы бы использовали soci::rowset<int>
как тип для results
, Ваш пример является особым случаем, потому что вы еще не знаете тип, но для этого соц. soci::row
типа, чтобы вы могли использовать soci::rowset<soci::row> results
Кроме того, вы никогда не должны строить свой запрос путем конкатенации строк ввода пользователя, поэтому вместо sql.prepare << "SELECT * from games where user_name='" << user.getName() << "'"
использованиеsql.prepare << "SELECT * from games where user_name=:name", soci::use(name,user.getName());
вместо.
В противном случае вы уязвимы для так называемых SQL-инъекций.