c++ mysql查询字符串解析带引号和变量
Posted
技术标签:
【中文标题】c++ mysql查询字符串解析带引号和变量【英文标题】:c++ mysql query string parsing with quotes and variables 【发布时间】:2017-01-15 21:09:07 【问题描述】:我正在尝试在不使用 c++ 中的 mysql 连接器类的情况下更新 mysql 数据库。但我不知道如何将长整数添加到查询将接受的字符串中。
#define CONVERSION 16
long myCounter = 0 ;
long gallons = 0;
gallons = myCounter / CONVERSION;
string sql = ("UPDATE utilityroom.Sprinklers SET "
"gallons='@gallons' WHERE label='PUMP';");
query_state = mysql_query(connection, sql);
result = mysql_store_result(connection);
它在查询中的第二个参数处一直失败。
错误:无法将参数“2”的“std::string aka std::basic_string”转换为“const char*”到“int mysql_query(MYSQL*, const char*)”
编辑:
我讨厌 c++ 处理字符串的方式。我不明白为什么每个字符串都必须转换为类元素!
这是我为使其正常工作所做的更改:
#include <sstream>
ostringstream strstr;
strstr << "UPDATE utilityroom.Sprinklers SET gallons='" << gallons << "' WHERE label='PUMP';";
string sql = strstr.str();
query_state = mysql_query(connection, sql.c_str());
【问题讨论】:
【参考方案1】:随便用
query_state = mysql_query(connection, sql.c_str());
没有从 std::string 到 const char* 的隐式转换。
【讨论】:
谢谢。在哪里可以找到有关使用“.c_str()”声明字符串的更多信息 例如这里en.cppreference.com/w/cpp/string/basic_string/c_str 它现在可以正确编译,但变量传递不正确。它传递的是“@gallons”而不是值。 sql= UPDATE utilityroom.Sprinklers SET gallons='@gallons' WHERE label='PUMP'; 你不能像这样在 C++ 中使用@gallons 语法。看看***.com/questions/8649454/…,但要注意 SQL 注入问题,并按照第二个答案的建议使用 prepareStatement。 真正了解SQL注入!否则,我不想站在由你的代码控制的洒水器下面!以上是关于c++ mysql查询字符串解析带引号和变量的主要内容,如果未能解决你的问题,请参考以下文章