MYSQL
在进行数据库编程之前必须先创建MYSQL
结构体,该结构体里有连接信息以及大量其他的信息。
MYSQL *STDCALL mysql_init(MYSQL *mysql);
该函数用来初始化MYSQL
结构体,其参数mysql
若为nullptr
则会创建、初始化、返回新对象;若非空则初始化对象并返回地址。
mysql_real_connect
连接数据库初始化好MYSQL
之后紧接着就用该函数连接数据库。
MYSQL* mysql_real_connect(
MYSQL *mysql, 上一步创建好的MYSQL
const char *host, 主机名或IP地址
const char *user, 登录名,如 root
const char *passwd, 登录密码
const char *db, 要访问的数据库名
unsigned int port, 端口号,传入0代表用3306
const char *unix_socket, 套接字或命名管道,一般传入 nullptr
unsigned long client_flag 一般传0
)
成功连上数据库返回的还是开始创建的MYSQL
,连接失败返回null
。
mysql_query()
int mysql_query(MYSQL *mysql, const char *q);
q
就是SQL语句,只不过放在了字符数组里(不带分号;
)。SQL语句成功返回0;失败返回非0。
如果q
里的SQL语句是查询语句,则查询的结果存储在传入的mysql
参数中。这个结果称为结果集,下一步就是将结果集中的所有数据,存放在一个变量 A 中,类型为MYSQL_RES
。
mysql_use_result()
函数如何使用:调用mysql_real_query()
或mysql_query()
之后,对于成功生成结果集(SELECT, SHOW, DESCRIBE, EXPLAIN, CHECK TABLE,等等)的SQL语句,必须调用mysql_store_result()
或mysql_use_result()
。
MYSQL_RES *STDCALL mysql_use_result(MYSQL *mysql);
功能:逐行读取结果集,将读取到的数据存到类型为MYSQL_RES
的变量中。虽然结果存放进了该变量中,但还不能把它作为结果正常使用(变量A中存放的数据,是以“行”和“列”为结构的,也就是一整个表。),而需要另一个变量 B ,类型为MYSQL_ROW
。
mysql_fetch_row()
函数使用:一般在mysql_store_result()
、mysql_store_result_nonblocking()
、mysql_use_result()
的后面调用。
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
功能:检索变量 A 的下一行赋给变量B,并返回变量 B 。变量 B 类似一个一维数组,一次只能储存一行变量A中的数据,而下标[ ]表示列,假设变量B当前储存了变量A中的第一行,则B[2]就是指这一行的第二列(即第2个字段)的值。为了将变量A中的所有行取出来,需要循环调用mysql_fetch_row()
。
注:mysql_fetch_row()
检索变量A的下一行,如果没有更多行需要检索,则返回NULL
。
mysql_free_result()
释放内存void STDCALL mysql_free_result(MYSQL_RES *result);
功能:释放由mysql_store_result()
,mysql_use_result()
,mysql_list_dbs()
等分配的内存。如果使用过这些函数,必须通过调用mysql_free_result()
释放内存。参数是之前的变量 A 。
mysql_close()
关闭连接void mysql_close(MYSQL *mysql);
mysql_use_result()
和mysql_store_result()
的区别MYSQL_RES *STDCALL mysql_store_result(MYSQL *mysql);
MYSQL_RES *STDCALL mysql_use_result(MYSQL *mysql);
mysql_store_result()
会将结果集整个读入并存储到客户端。较为占用空间。
mysql_use_result()
则是直接从服务器读取结果,不将其存储在临时表或本地缓冲区中。使用的内存更少。
mysql_insert_id()
函数uint64_t STDCALL mysql_insert_id(MYSQL *mysql);
返回由前面由INSERT
或UPDATE
语句为AUTO_INCREMENT
列生成的值。
在对包含AUTO_INCREMENT字
段的表执行INSERT
语句,或使用INSERT
或UPDATE
使用LAST_INSERT_ID(expr)
设置列值之后,需要使用此函数。
MYSQL
、MYSQL_RES
、MYSQL_ROW
MYSQL
:该结构代表1个数据库连接的句柄。几乎所有的MySQL函数均使用它。
MYSQL_RES
:该结构代表返回行的查询结果(例如SELECT
查询语句)。
MYSQL_ROW
:这是1行数据的“类型安全”表示,行是通过调用mysql_fetch_row()
从MYSQL_RES
型变量中获得的。(也就是前面提到的变量B)