嗯,出于某种原因,它只在第一个用户名(和密码)上执行此操作,并为我的矢量有多大。关于为什么的任何想法?
int eMysql::strip(string &input) {
char* from = new char[strlen(input.c_str()) * 3 + 1];
mysql_real_escape_string(&mysql, from, input.c_str(), input.length());
input = input.assign(from);
delete from;
}
使用的地方:
if(query.size() > 0) {
mysql->strip(query[0]);
mysql->strip(query[1]);
mysql->query("SELECT `username` FROM `users` where `username` = '"+ query[0] +"';");
答案 0 :(得分:1)
我建议将查询构建为单独的字符串变量,而不是在参数中传递混乱:
static const char fixed_text[] = "SELECT `username` FROM `users` where `username` = '";
std::string query_text(fixed_text);
query_text += query[0];
query_text += "';";
mysql->query(query_text);
此技术允许您在将查询发送到MySql之前检查该查询。
我建议您检查query[0]
变量是否包含\r
和\n
等奇怪字符。 MySql手册中有一个部分列出了需要转义的字符。