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查询字符串解析带引号和变量的主要内容,如果未能解决你的问题,请参考以下文章

在所有 oracle 包中查找带引号和双引号的字符串

PHP字符串的定义方式及区别

MySQL 5.7 JSON_EXTRACT 不适用于对象中的带引号的字符串:[错误]“字符串中缺少右引号”

在表中插入带引号和不带引号的字符串部分

Perl双引号和单引号的区别

关于引号的总结