插入MySQL命令和C++变量

Intercalate MySQL command with C++ variables

本文关键字:C++ 变量 命令 MySQL 插入      更新时间:2023-10-16

我需要在MySQL命令中插入程序提供的C++变量来创建查询并提交。

我有以下内容:

int source, temperature, humidity, airCo, noise;
char query[500];

尝试#1:

sprintf (query, "insert into defaultsensor1 (dateTime, temperature, humidity, airCo, noise) values (now(), " + 
                temperature + ", " + 
                humidity + ", " + 
                airCo + ", " + 
                noise + ")";

尝试#2:

 sprintf (query, "insert into defaultsensor1 (dateTime, temperature, humidity, airCo, noise) values (now(), %i, %i, %i, %i)",
                 temperature, 
                 humidity, 
                 airCo, 
                 noise );

尝试#3:

sprintf (query, "insert into defaultsensor1 (dateTime, temperature, humidity, airCo, noise) values (now(), %s, %s, %s, %s)", 
                std::to_string(temperature), 
                std::to_string(humidity), 
                std::to_string(airCo), 
                std::to_string(noise));

啊啊啊,都没用。

互联网上的教程基本上都围绕着我上面尝试过的内容。我该怎么做?

常规提示,在提供表名时,使用反勾`tablename`来避免关键字冲突。将字符串字段值置于引号'stringvalue'中。

对于sql查询,我通常使用std::ostringstream,因为它会自动将数字转换为字符串。

#include <sstream>
int main()
{
    int source, temperature, humidity, airCo, noise;
    // ... such and so forth ...
    std::ostringstream sql;
    sql << "insert into `defaultsensor1`";
    sql << " (`dateTime`, `temperature`, `humidity`, `airCo`, `noise`)";
    sql << " value ";
    sql << "(now(), " << temperature << ", " << humidity << ", " << airCo << ", " << noise << ")";
    std::cout << "sql: " << sql.str().c_str() << 'n';
}

注意:使用sql.str().c_str()std::ostringstream中提取字符串,以便传递给MySQL API调用。

例如。

res = stmt->executeQuery(sql.str().c_str());

这将std::ostringstream转换为std::string,然后转换为呼叫所需的const char*