2014-02-06 34 views
1

我想在創建char數組時添加一些變量。我怎樣才能做到這一點? sqlite3_prepare_v2需要char[]。感謝在C++中的char數組,並將它與其他合併

unsigned int keyid = 10; 
char buffer2[] = "SELECT * FROM table WHERE id = " + keyid; // problem (convert to char and merge) 
sqlite3_prepare_v2(db, buffer2, strlen(buffer2), &stmt, 0); 
+0

使用'std :: string'。 char []沒有運算符重載字符串連接。然後你可以使用'std :: c_str()'來獲得一個const char * – hetepeperfan

+2

小心小Bobby表;-) http://xkcd.com/327/ – doctorlove

回答

2

你應該不是你的綁定參數。這也可以防止任何潛在的SQL注入攻擊。

unsigned int keyid = 10; 
const char buffer2[] = "SELECT * FROM table WHERE id = ?"; 
sqlite3_prepare_v2(db, buffer2, -1, &stmt, 0); 
sqlite3_bind_int(&stmt, 1, keyid); 
+0

謝謝,我的情況很好的解決方案。你確定'?'需要在'sqlite3_bind_int'中像'1'那樣綁定,而不是'0'? PS。是真的,綁定真的可以防止注入的情況下,如果keyid是「字符串」,我會用'bind_text'函數嗎? – abrahab

+0

是的,綁定完全消除了SQL注入。是的,這應該是'1'。請參閱[文檔](http://www.sqlite.org/c3ref/bind_blob.html)。 –

2

把字符串內string :)

std::string buffer2 = "SELECT * FROM table WHERE id = " + std::to_string(keyid); 
sqlite3_prepare_v2(db, buffer2.c_str(), buffer2.length(), &stmt, 0); 
+0

'tostring'或'to_string'? – doctorlove

+0

編輯,謝謝! – 2014-02-06 20:10:30

2

那麼對於C++最明顯的解決方案是使用std::string

std::string buffer2 = "SELECT * FROM table WHERE id = " + std::to_string(keyid); 
sqlite3_prepare_v2(db, buffer2.c_str() , buffer2.size() , &stmt, 0); 
1

,因爲你使用的是C++

#include <sstream> 
//... 
std::stringstream buffer2; 
buffer2 << "SELECT * FROM table WHERE id = " << keyid; 

你可以流的不同類型,然後使用該字符串的c_str哪裏ac風格的字符串是必需的。

buffer2.str().c_str()' 

因爲這是SQL,在您的查詢中使用的參數是要好得多。

相關問題