我是c++的初学者,我有两个小问题。
1-我想获取用户的公共ip地址。为此,我使用如下 curl :
CURL* curl;
CURLcode verif;
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://ifconfig.me/?action=render");
verif = curl_easy_perform(curl);
curl_easy_cleanup(curl);
但当我运行程序时,它会写入ip,但我不知道如何将其存储到变量中。我应该怎么做才能做到这一点?
2-我想向数据库发送请求,但我的语法有一些问题。我的代码:
int query_state = mysql_query(db, "INSERT INTO `account` (`id`, `id_user`, `ip`, `last_join`) VALUES (NULL, '" << id << "', '" << ip_user << "', '" << date << "')");
但我的“<<”有个错误。错误在请求中:(null,“<<id
事先谢谢你的帮助。
1条答案
按热度按时间pkbketx91#
如果您只对ip地址感兴趣,而对其他内容不感兴趣,请查询https://ifconfig.me/ip 而不是https://ifconfig.me/?action=render. 然后使用
CURLOPT_WRITEFUNCTION
回调将输出保存到变量,例如std::string
例如:至于数据库,你不能用
<<
以您尝试的方式连接字符串。这就是为什么编译器会出错。如果你真的想用
<<
对于串联,则需要使用std::ostringstream
收集子字符串,然后可以调用str()
方法提取已完成的std::string
例如:否则,只需使用普通字符串
+
改为串联:尽管如此,请注意,这种手动构建的sql语句很容易受到sql注入攻击。要避免此类攻击,必须对输入字符串进行转义,例如
mysql_real_escape_string_quote()
,这样攻击者就不能提供格式错误的输入,从而破坏sql语句执行恶意操作,例如:更好的选择是使用参数化查询。它不仅可以堵住此类攻击的漏洞,还可以让db为您处理任何必要的输入字符串转义,例如: