这个问题看起来很简单,但我是C ++和MySQL的菜鸟,所以它仍然不起作用。
这是合约: 我有一个包含xml的字符串(_bstr_t),我想将它存储在MySql的longblolb列中。
我尝试失败的方式:
是否还有其他方法可以在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());
非常感谢你的帮助!
答案 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。 下次有些东西无法编译时,也会发布错误,而不仅仅是它没有。