SOCI 行集<row>奇怪错误

SOCI rowset<row> weird error

本文关键字:错误 gt row lt SOCI 行集      更新时间:2023-10-16

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

"c:mingwincludesociexchange-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)...

您必须指定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() << "'"使用CCD_ 8。

否则,您很容易受到所谓的SQL注入攻击