使用C ++在Mysql查询中插入JSON格式

时间:2015-08-12 14:40:07

标签: c++ mysql json raspberry-pi2

我使用JSON格式在我的c ++程序中保存数据,我想将它发送到MySql数据库(表格选项卡有一个类型为:TEXT的列)但查询失败(也测试了VARCHAR和CHAR)

这是代码的一部分,因为我们对其余部分没有兴趣

     string json_example = "{\"array\":[\"item1\",\"item2\"], \"not an array\": \"asdf\"}";
   mysql_init(&mysql);  //initialize database connection
   string player="INSERT INTO tab values (\"";
    player+= json_example; 
    player += "\")"; 
    connection = mysql_real_connect(&mysql,HOST,USER,PASSWD,DB,0,NULL,0); 
// save data to database
   query_state=mysql_query(connection, player.c_str());  // use player.c_str()

显示将使用的最终查询:cout<<玩家给出:

  

INSERT INTO标签值(" {"数组":[" item1"," item2"],"不是   array":" asdf"}")

使用例如字符串json_example =" some text&#34 ;;工作中 但是使用json格式它不起作用,也许问题来自使用花括号{}或双引号""但我还没有办法解决它。

我正在使用: mysql Ver 14.14 Distrib 5.5.44,对于raspberry pi 2下的debian-linux-gnu(armv7l)

任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:4)

使用prepared statement。请参阅prepared statements documentation in the MySQL reference manual

准备好的陈述更正确,更安全,可能更快,并保持代码清洁。你获得所有这些好处,不需要逃避任何事情。几乎没有理由不使用它们。

这样的事可能有用。但是把它当作一粒盐,因为我没有测试或编译它。它应该只是给你一般的想法:

MYSQL_STMT* const statement = mysql_stmt_init(&mysql);
std::string const query = "INSERT INTO tab values(?)";
mysql_stmt_prepare(statement, query, query.size());
MYSQL_BIND bind[1] = {};
bind[0].buffer_type = MYSQL_TYPE_STRING;
bind[0].buffer = json_example.c_str();
bind[0].buffer_length = json_example.size();
mysql_stmt_bind_param(statement, bind);
mysql_stmt_execute(statement);