SOCI行<row>奇怪的错误</row>

时间:2015-02-09 17:48:42

标签: c++ database sqlite soci

我最近为我的项目安装了SOCI库,因为它需要使用SQLite数据库。 我试图获取rowset但我得到了奇怪的错误:

"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 个答案:

答案 0 :(得分:4)

您必须指定soci::rowset的类型,因为它是模板类型。因此,例如,如果您select为整数列,则会使用soci::rowset<int>作为results的类型。您的示例是一个特例,因为您还不知道该类型,但是为此,soci定义了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注入攻击

的攻击