目录
一 安装 MySQL 客户端库
//搜索与 MySQL 客户端库相关的包(这一步是可选的,但有助于确认包名)
sudo apt search mysqlclient
//安装 MySQL C API 的开发文件
sudo apt install libmysqlclient_dev
头文件:/usr/include/mysql 库文件: /usr/lib/mysql/
二 MySQL C API 基本概念
- MYSQL: 结构体,表示到 MySQL 服务器的连接。
- MYSQL_RES: 结构体,代表 SQL 查询的结果集。
- MYSQL_ROW: 指向行的指针,从
MYSQL_RES
中获得的一行数据。 - MYSQL_FIELD: 结构体,包含关于表中列的信息,如名称、类型等。
基本函数
mysql_init(MYSQL *mysql)
- 初始化一个
MYSQL
结构体实例,为连接数据库做准备。如果mysql
参数为NULL
,函数将分配一个新的MYSQL
结构体并返回其指针;否则,它将初始化提供的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)
- 尝试与 MySQL 数据库服务器建立连接。需要提供服务器的主机名、用户名、密码、要连接的数据库名、端口号(如果不是默认端口3306)、Unix 套接字路径(如果适用)以及客户端标志。
mysql_close(MYSQL *mysql)
- 关闭与 MySQL 服务器的连接,并释放与
MYSQL
结构体相关联的所有资源。
- 关闭与 MySQL 服务器的连接,并释放与
mysql_query(MYSQL *mysql, const char *query)
- 向 MySQL 服务器发送一个 SQL 查询。如果查询成功,它将返回
0
;如果失败,则返回非零值。注意,这个函数并不直接返回结果集;它只是执行查询并可能产生结果集,该结果集需要通过其他函数来获取。
- 向 MySQL 服务器发送一个 SQL 查询。如果查询成功,它将返回
mysql_store_result(MYSQL *mysql)
- 对于 SELECT、SHOW、DESCRIBE 或 EXPLAIN 语句,这个函数检索完整的结果集并将其存储在内存中。它返回一个指向
MYSQL_RES
结构体的指针,该结构体包含了结果集。如果查询没有产生结果集(如 INSERT、UPDATE、DELETE),则此函数返回NULL
。
- 对于 SELECT、SHOW、DESCRIBE 或 EXPLAIN 语句,这个函数检索完整的结果集并将其存储在内存中。它返回一个指向
mysql_free_result(MYSQL_RES *result)
- 释放
mysql_store_result()
或mysql_use_result()
返回的结果集所占用的内存。在获取并处理了结果集中的所有数据后,应该调用此函数来避免内存泄漏。
- 释放
mysql_fetch_row(MYSQL_RES *result)
- 从结果集中检索下一行。它返回一个指向
MYSQL_ROW
的指针,该指针是一个字符串数组,包含了当前行的列值。如果没有更多行可供检索,则返回NULL
。
- 从结果集中检索下一行。它返回一个指向
mysql_fetch_field(MYSQL_RES *result)
- 返回指向
MYSQL_FIELD
结构体的指针,该结构体包含了结果集中当前字段的信息(如字段名、类型等)。每次调用都会返回结果集中的下一个字段信息,直到没有更多字段为止。如果结果集为空或所有字段信息都已被检索,则返回NULL
。注意,这个函数通常与mysql_fetch_fields()
结合使用,后者返回包含所有字段信息的MYSQL_FIELD
结构体数组。
- 返回指向
三 编译命令
gcc my.c -o my -L /usr/lib/mysql -lmysqlclient