c++ - SOCI 行集<行> 奇怪的错误

标签 c++ database sqlite soci

我最近为我的项目安装了 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)...

最佳答案

您必须指定 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 注入(inject)攻击

关于c++ - SOCI 行集<行> 奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28416057/

相关文章:

android - 从 sqlite 和 mysql 加载数据微调器

c++ - 从包含文件中包含的最佳实践

c++ - boost.random buggy 警告 - 这是什么意思?

php - 从生成的复选框中将多个条目插入数据库

MYSQL SELECT 在具有 NULL 值的 FK 字段上不返回任何内容

java - 使用 JDBC 优化 SQLite 数据库的插入

c++ - 代码给出 ASCII 数字而不是字符

派生参数化构造函数的 C++ 设置值

c# - 无法用两个表创建外键

sqlite - 游戏框架 2 SQLite