《MySQL 权限与访问进阶:普通用户搭建、跨端登录及 C/C++ 开发对接教程》

【三】语言操作库(接口学习)

(1)初始化

mysql_init(null);

(2)设置字符集

mysql_options(初始化的mysql指针, MYSQL_SET_CHARSET_NAME, "utf8mb4");

(3)连接MySQL

mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag);

(4)关闭连接

//关闭连接,释放资源
mysql_close(mysql_init返回的指针);

(5)操作指令

(1)增删

int mysql_query(MYSQL *mysql, const char *stmt_str);

2)获取输出内容

其实它是将输出的内容信息放在一个二维矩阵 里面,二级指针的形式,返回给我们行和列,只要遍历它返回的行和列也就遍历了整个二维字符串数组,拿到了输出内容,下面是接口:

//获取结果集,有了这个函数才可以继续
MYSQL_RES *result = mysql_store_result(mysql_init的返回值);

//关闭文件接口
mysql_free_result(result);

注意:上面这个result相当于就是文件接口,使用完需要及时关闭

//获取结果行数
my_ulonglong mysql_num_rows(MYSQL_RES *res);

  • 参数resmysql_store_result()返回的结果集指针
  • 返回值:结果集的行数(my_ulonglong是无符号长整型,可通过%llu格式化输出)

//获取结果列数
unsigned int mysql_num_fields(MYSQL_RES *res);

  • 参数res是结果集指针
  • 返回值:结果集的列数(无符号整数)

//获取列名称
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);

参数:res是结果集指针。
返回值:MYSQL_FIELD结构体数组,数组长度等于mysql_num_fields(res)的返回值。每个MYSQL_FIELD结构体的核心成员包括:
name:列名(字符串);
type:列的数据类型(如MYSQL_TYPE_INT对应 INT 类型);
length:列的定义长度。

(6)完整代码

#include<stdio.h>
#include<mysql.h>

int main()
{
//初始化
MYSQL* my =mysql_init(NULL);
if(my==NULL)
{
printf("sorry,mysql_init is errno");
}

//设置字符集
mysql_options(my, MYSQL_SET_CHARSET_NAME, "utf8mb4");

//连接MySQL
mysql_real_connect(my, "localhost", "newuser", "123456", "hello", (unsigned int)3306, NULL, (unsigned long) 0);

//操作
const char* ptr="select * from student";
mysql_query(my,ptr);

//获取结果集
MYSQL_RES *result = mysql_store_result(my);
//获取行数
my_ulonglong row_count = mysql_num_rows(result);
//获取列数
unsigned int col_count = mysql_num_fields(result);
//获取列名称
MYSQL_FIELD *fields = mysql_fetch_fields(result);

//打印列名称
for(unsigned int i=0;i<col_count;i++)
{
printf("%s\t",fields[i].name);
}
printf("\n");
//打印数据(row用来读取每一行的数据)
MYSQL_ROW row;
while (row = mysql_fetch_row(result))
{
//逐列打印每行数据
for (unsigned int i = 0; i < col_count; i++)
{
printf("%s\t", row[i]);
}
printf("\n"); // 每一行打印完换行
}

//闭连接,释放资源
mysql_free_result(result);
mysql_close(my);
return 0;
}

上一篇 RSR20-X 终端流量经过旁挂审计设备后无法上网
下一篇 服务器能ping通但是不能通过访问接口?