Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将xml插入Mysql? 这些问题看起来很简单,但是我是C++和MySQL中的NOOB,所以它仍然不起作用。p>_C++_Mysql_Xml_Insert_Blob - Fatal编程技术网

如何将xml插入Mysql? 这些问题看起来很简单,但是我是C++和MySQL中的NOOB,所以它仍然不起作用。p>

如何将xml插入Mysql? 这些问题看起来很简单,但是我是C++和MySQL中的NOOB,所以它仍然不起作用。p>,c++,mysql,xml,insert,blob,C++,Mysql,Xml,Insert,Blob,交易如下: 我有一个包含xml的字符串,我想将它存储在MySql的longblolb列中 我尝试的方法失败了: 在本地文件上编写xml并使用mysql命令LOAD_file,这在本地有效,但在服务器上不起作用,在服务器上使用此方法不安全 使用mysql\u real\u escape\u string我认为这是一种方法,但是这个函数需要char*并且我有多字节字符串,所以它不起作用 在MySQL中是否有其他方法存储xml,或者是否有类似MySQL\u real\u escape for mult

交易如下: 我有一个包含xml的字符串,我想将它存储在MySql的longblolb列中

我尝试的方法失败了:

在本地文件上编写xml并使用mysql命令LOAD_file,这在本地有效,但在服务器上不起作用,在服务器上使用此方法不安全 使用mysql\u real\u escape\u string我认为这是一种方法,但是这个函数需要char*并且我有多字节字符串,所以它不起作用 在MySQL中是否有其他方法存储xml,或者是否有类似MySQL\u real\u escape for multibyte的函数

strcpy不起作用它给了我访问违规读取位置。。。当我尝试演员阵容时,它看起来不错,但最终我出现了一个MySql错误:

错误:您的SQL中有一个错误 句法;检查手册 对应于您的MySQL服务器 要使用的正确语法的版本 靠近“?xml版本=\1.0”\ 编码=\UTF-16\?>\r\n XV\u对象 第1行的noNamespaceSchem'

最后,对于你给我的第一个解决方案,我对C++是很陌生的,我不知道把它放在::char *,我不能编译。
char *to = new char[xml.length() * 2 + 1];  
char* from = (char*)xml::char*;  
mysql_real_escape_string(conn,to,from,xml.length());

非常感谢你的帮助

据我所知,这非常容易,因为microsoft为此提供了::char*

如果您的字符串位于_bstr_t对象中,只需执行mysql\u real\u escape\u stringyour\u object::char*,就可以了

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

char xml[200];
_bstr_t the_xml_you_loaded;
strcncpy(xml,(char*)the_xml_you_loaded, sizeof(xml));
_bstr_t xml;
最后但并非最不重要的一点是,您可以简单地从_bstr\u t强制转换为char*:

char* xml = (char*)the_xml_you_loaded;
mysql_real_escape_string(xml);
编辑:在评论之后

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

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

char xml[200];
_bstr_t the_xml_you_loaded;
strcncpy(xml,(char*)the_xml_you_loaded, sizeof(xml));
_bstr_t xml;
那就这样做吧

xml::char*
并将其用作mysql\u real\u转义字符串中的参数。 再一次对演员们说,就像我写的那样

char* somevar = (char*)xml;
并将其传递给mysql\u real\u escape\u string。
下次有什么东西不能编译时,也要发布错误,而不仅仅是它不能编译。

据我所知,这非常容易,因为microsoft为此提供了::char*

如果您的字符串位于_bstr_t对象中,只需执行mysql\u real\u escape\u stringyour\u object::char*,就可以了

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

char xml[200];
_bstr_t the_xml_you_loaded;
strcncpy(xml,(char*)the_xml_you_loaded, sizeof(xml));
_bstr_t xml;
最后但并非最不重要的一点是,您可以简单地从_bstr\u t强制转换为char*:

char* xml = (char*)the_xml_you_loaded;
mysql_real_escape_string(xml);
编辑:在评论之后

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

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

char xml[200];
_bstr_t the_xml_you_loaded;
strcncpy(xml,(char*)the_xml_you_loaded, sizeof(xml));
_bstr_t xml;
那就这样做吧

xml::char*
并将其用作mysql\u real\u转义字符串中的参数。 再一次对演员们说,就像我写的那样

char* somevar = (char*)xml;
并将其传递给mysql\u real\u escape\u string。
下次有什么东西不能编译时,也要发布错误,不仅仅是因为它不能编译。

part1嗨,罗宾,非常感谢你的快速回答。strcpy不起作用它给了我访问权限和读取位置。。。当我尝试强制转换时,它看起来不错,但最终我遇到了一个MySql错误:错误:您的SQL语法有一个错误;请查看与MySQL服务器版本对应的手册,以获取正确的语法,以便在我执行此操作但未编译的cast中使用“\r\npart2”附近的语法:char to=new char[xml.length*2+1];char from=char*xml::char*;mysql\u real\u escape\u stringconn,to,from,xml.length;非常感谢你的帮助!嗨,罗宾,非常感谢你,它现在可以工作了!非常感谢您抽出时间,我将为以后的帖子提供更多细节。你好,罗宾,非常感谢你的快速回答。strcpy不起作用它给了我访问权限和读取位置。。。当我尝试强制转换时,它看起来不错,但最终我遇到了一个MySql错误:错误:您的SQL语法有一个错误;请查看与MySQL服务器版本对应的手册,以获取正确的语法,以便在我执行此操作但未编译的cast中使用“\r\npart2”附近的语法:char to=new char[xml.length*2+1];char from=char*xml::char*;mysql\u real\u escape\u stringconn,to,from,xml.length;非常感谢你的帮助!嗨,罗宾,非常感谢你,它现在可以工作了!非常感谢您抽出时间,我将为以后的帖子提供更多细节。祝您有个美好的一天。