VS2015编写C语言程序连接mysql并插入变量

xiaoxiao2021-02-27  309

首先是VS2015能够连接到mysql,我是参照这个博客的,点击打开链接。

但是我下载的是mysql-install-community-5.7.18.0.msi版本的,所以mysql.h和libmysql.h在

这个文件夹下的include和lib的文件夹下。

由于这个版本的mysql.h和libmysql.h的版本不一样,mysql.h的版本是32位的,libmysql.h却是64位的,而我的VS2015是32位的,所以编译肯定不通过,出现

error LNK2019: 无法解析的外部符号 _mysql_real_connect@32,该符号在函数 _main 中被引用 error LNK2019: 无法解析的外部符号 _mysql_query@8,该符号在函数 _main 中被引用 error LNK2019: 无法解析的外部符号 _mysql_init@4,该符号在函数 _main 中被引用 error LNK2019: 无法解析的外部符号 _mysql_close@4,该符号在函数 _main 中被引用

warning LNK4272: 库计算机类型“x64”与目标计算机类型“X86”冲突

最后是下载了32位的libmysql.h和libmysql.dll将其替换,才能编译通过。

还有一个要注意的问题是C++有string类型,而C语言只有char类型。所以插入的语句就用char类型。

void insertData(char *a, char *b, char *c) { char sqlstr[1024]; int len = sprintf_s(sqlstr, 256, "INSERT INTO user (appname,devname,msg) VALUES('%s','%s','%s');", a, b, c); if (len < 0) { printf("mysql_query() ----insert data failed\n"); mysql_close(&mydata); } if (0 == mysql_query(&mydata, sqlstr)) { printf("mysql_query() insert data succeed\n"); } else { printf("mysql_query() insert data failed\n"); mysql_close(&mydata); } } 有可能会出现的调试错误:

1.内存溢出问题: char *sqlstr = ""; int len = sprintf_s(sqlstr, 1024, "INSERT INTO user (appname,devname,msg) VALUES('%s','%s','%s');", a, b, c); 0x742A2FDD (ucrtbase.dll)处(位于 csdemo.exe 中)引发的异常: 0xC0000005: 写入位置 0x002F89E3 时发生访问冲突。 2.insert failed: char *sqlstr; int len = sprintf_s(sqlstr, 1024, "INSERT INTO user (appname,devname,msg) VALUES('%s','%s','%s');", a, b, c); 3.可能出现的内存溢出问题: char sqlstr[1024]; 1024 是要给它足够的内存空间,不然就会内存溢出; int len = sprintf_s(sqlstr, 256, "INSERT INTO user2 (appeui,deveui,payload) VALUES('%lld','%lld','%s');", a, b, str); 4.栈内存自动释放: char sqlstr[1024]; 不用释放内存;

转载请注明原文地址: https://www.6miu.com/read-1660.html

最新回复(0)