首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >套接字rowset<row>怪异误差

套接字rowset<row>怪异误差
EN

Stack Overflow用户
提问于 2015-02-09 17:48:41
回答 1查看 1.1K关注 0票数 0

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

代码语言:javascript
复制
"c:\mingw\include\soci\exchange-traits.h:35:5: error: incomplete type 'soci::details::exchange_traits<soci::row>' used in nested name specifier".

我不知道我的密码有什么问题..。执行此错误的行是:

代码语言:javascript
复制
soci::rowset<> results = (sql.prepare << "SELECT * from games where user_name='" << user.getName() << "'");

顺便说一下,我使用了最新版本的SOCI。守则的更广泛部分:

代码语言:javascript
复制
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)...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-11 08:32:15

您必须指定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注入攻击的攻击。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28416057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档