如何将xml插入Mysql?

时间:2010-08-17 15:29:58

标签: c++ mysql xml insert blob

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

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

我尝试失败的方式:

  1. 将我的xml写在本地文件上并使用mysql命令LOAD_FILE,这在本地工作但不在服务器上,并且将此方法与服务器一起使用是不安全的
  2. 使用mysql_real_escape_string()我认为这是要走的路但是这个函数需要char *而且我有多字节字符串所以它不起作用
  3. 是否还有其他方法可以在MySQL中存储xml,或者是否有类似mysql_real_escape的函数用于多字节。

    strcpy没有用,它给了我“访问违规阅读位置......”当我尝试演员时它看起来不错但最终我有一个MySql错误:

      

    “错误:您的SQL中有错误   句法;检查手册   对应于您的MySQL服务器   用于正确语法的版本   '?xml version = \“1.0 \”附近   encoding = \“UTF-16 \”?> \ r \ n XV_Object   noNamespaceSchem'在第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());
    

    非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

据我所知,这很容易,因为microsoft为此提供了:: 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。 下次有些东西无法编译时,也会发布错误,而不仅仅是它没有。