簡體   English   中英

SOCI行集 <row> 怪異的錯誤

[英]SOCI rowset<row> weird error

我最近為我的項目安裝了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='" << user.getName() << "'" sql.prepare << "SELECT * from games where user_name=:name", soci::use(name,user.getName()); 代替。

否則,您很容易受到所謂的SQL注入攻擊的攻擊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM