用mysql C API传输大文件内容到mysql数据库中

19 views
Skip to first unread message

bridged

unread,
Nov 4, 2010, 3:00:47 PM11/4/10
to ytht bbs代码开发
传输代码:

插入message
sprintf(sqlbuf, "update %sforum_post set message = '",
DISCUZ_DATABASE_PRE);
sqlfile = (char*)malloc(UBBFILESIZE); // 应该超不过4M
// stpcpy是个非常冷僻的字符串C函数,与strcpy不同的是,它返回dest string的尾部而不是头部
sqlfileend = stpcpy(sqlfile, sqlbuf); // sqlfileend should be
the tail of the first string sqlfile
sqlfileend += mysql_real_escape_string(mysql, sqlfileend,
ubbresultutf8, strlen(ubbresultutf8));
sprintf(sqlbuf, "' where pid = %d;", pid);
strcat(sqlfileend, sqlbuf);
// mysql_real_escape_string是转义ubbresultutf8这个sql语句,并加到sqlfileend所对
应的内存空间中,
// 转义最坏的情况是每个字符都需要转义,所以需要sizeof(ubbresult)*2的大小,再加上sql语句的大小
// ubbresultutf8是ytht file转义为ubb码后的结果,由ythtfiletodiscuzxubb生成
// 存储到forum_post表的message字段里,这个字段的类型是MEDIUMTEXT,上限为16.7MB
// ubbresultutf8和sqlfileend都是吃大内存的,但是暂时没有办法,直接用函数返回ubbresult并不会省内

mysql_query(mysql, sqlfile);

关键:


今天终于腾出时间测试完了传输版面文章功能
发现问题的关键在于导入文章内容时使用的strcpy
返回的是dest字符串的头部
而程序中要求的是返回尾部,我发现一个很冷门的函数stpcpy,这个函数返回尾部
这样一下子就成功了

Reply all
Reply to author
Forward
0 new messages