gpt4 book ai didi

c++ - 如何将xml插入Mysql?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:02:07 27 4
gpt4 key购买 nike

这个问题看起来很简单,但我是 C++ 和 MySQL 的菜鸟,所以它仍然无法正常工作。

这是交易:我有一个包含 xml 的字符串 (_bstr_t),我想将它存储在 MySql 的 longblolb 列中。

我尝试过但失败的方法:

  1. 将我的 xml 写入本地文件并使用 mysql 命令 LOAD_FILE,这在本地有效但在服务器上无效,并且在服务器上使用此方法不安全
  2. 使用 mysql_real_escape_string() 我认为这是可行的方法,但是这个函数需要 char* 并且我有多字节字符串所以它不起作用

是否有其他方法可以在 MySQL 中存储 xml,或者是否有类似 mysql_real_escape 的多字节函数。

strcpy 不工作它给我“访问冲突读取位置...”当我尝试强制转换时它看起来不错但最后我有一个 MySql 错误:

"Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?xml version=\"1.0\" encoding=\"UTF-16\"?>\r\n XV_Object noNamespaceSchem' at line 1"

最后,对于你给我的第一个解决方案,我是 C++ 的新手,我不知道将::char* 放在哪里,我无法编译。

char *to = new char[xml.length() * 2 + 1];  
char* from = (char*)xml::char*;
mysql_real_escape_string(conn,to,from,xml.length());

非常感谢您的帮助!

最佳答案

据我所知,这真的很容易,因为微软为此提供了::char*。

如果您的字符串在 _bstr_t 对象中,只需执行 mysql_real_escape_string(your_object::char*),就可以了。

如果失败,您还可以使用 strcncpy。你可以这样做:

char xml[200];
_bstr_t the_xml_you_loaded;
strcncpy(xml,(char*)the_xml_you_loaded, sizeof(xml));

最后但同样重要的是,您可以简单地将 _bstr_t 转换为 char*:

char* xml = (char*)the_xml_you_loaded;
mysql_real_escape_string(xml);

编辑:(评论后)

Nick,无论何时使用“new”,请确保最后调用 delete 以消除不需要的内存错误。这与您的问题无关,这只是您应该遵循的一般建议。

对于我的第一个解决方案,将::char* 放在 _bstr_t 对象后面。例如如果是这样的话:

_bstr_t xml;

然后做那个。

xml::char*

并将其用作 mysql_real_escape 字符串中的参数。再次进行类型转换制作,就像我写的那样

char* somevar = (char*)xml;

并将其传递给 mysql_real_escape_string。下次有什么东西没有编译时,也发布错误,而不仅仅是它没有编译。

关于c++ - 如何将xml插入Mysql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3504156/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com