我使用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)
任何帮助将不胜感激,谢谢。
答案 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);