常用的 MySQL API
1.mysql_init()
初始化一个MySQL对象
MYSQL *
mysql_init(MYSQL *mysql)
返回值是初始化的MYSQL *句柄。 如果没有足够的内存来分配新对象,则为NULL。
2.mysql_real_connect()
连接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 *mysql 是一个存在的MYSQL结构地址。
host 可以是主机名,也可以是IP地址。
user是用户的MySQL登录ID。
passwd是用户的密码。
db是数据库名称。
port是TCP / IP连接的端口号。
unix_socke是使用的套接字或命名管道。
client_flag的值通常为0。
返回值: 如果连接成功,则为MYSQL *句柄;如果连接失败,则为NULL。
3.mysql_options()
连接前设置选项。
在mysql init()之后和mysql real connect()之前调用mysql options()。
int
mysql_options(MYSQL *mysql,
enum mysql_option option,
const void *arg)
返回值: 成功则为零。如果指定未知选项,则为非零。
下面给出一个示例:
MYSQL mysql;
mysql_init(&mysql);
mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"your_prog_name");
if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))
{
fprintf(stderr, "Failed to connect to database: Error: %s\n",
mysql_error(&mysql));
}
4.mysql_real_query()
执行SQL语句。
int
mysql_real_query(MYSQL *mysql,
const char *stmt_str,
unsigned long length)
mysql real query()执行stmt str所指向的SQL语句,一个字节长的字符串。
返回值: 成功则为零。如果发生错误,则为非零。
5.mysql_store_result()
检索并存储整个结果集。
MYSQL_RES *
mysql_store_result(MYSQL *mysql)
调用mysql_query()之后,必须为成功生成结果集的所有语句(SELECT,SHOW,DESCRIBE,EXPLAIN,CHECK TABLE等)调用mysql_store_result()。对结果集处理完成后,还必须调用mysql_free_result()。
mysql_store_result()将查询的整个结果读取到客户端,分配一个MYSQL_RES结构,并将结果放入该结构中。
如果该语句未返回结果集(例如,如果它是INSERT语句),或者发生错误并且读取结果集失败,则mysql_store_result()返回NULL。
调用mysql_store_result()并获得非空指针的结果后,可以调用mysql_num_rows()来查找结果集中有多少行。可以调用mysql_fetch_row()从结果集中获取行。
返回值: 指向带有结果的MYSQL_RES结构的指针。 如果语句未返回结果集或发生错误,则为NULL
6.mysql_fetch_row()
获取下一个结果集行。
MYSQL_ROW
mysql_fetch_row(MYSQL_RES *result)
行数由mysql_num_fields(result)给出。 如果row保存了对mysql_fetch_row()的调用返回值,则指向这些值的指针可以访问row [0]到row [mysql_num_fields(result)-1]。 NULL指针表示行中的NULL值。
返回值: 下一行的MYSQL_ROW结构,或者NULL。在mysql_store_result()之后使用时,如果没有更多行可检索,则mysql_fetch_row()返回NULL。
7.mysql_fetch_lengths()
返回当前行中所有列的长度。
unsigned long *
mysql_fetch_lengths(MYSQL_RES *result)
返回结果集中当前行的列的长度。 如果打算复制字段值,则此长度信息有助于优化,因为可以避免调用strlen()。空列和包含NULL值的列的长度为零。
返回值: 一个无符号长整数数组,代表每个列的大小(不包括任何终止的空字节)。 如果发生错误,则为NULL。
下面给出一个示例:
MYSQL_ROW row;
unsigned int num_fields;
unsigned int i;
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
unsigned long *lengths;
lengths = mysql_fetch_lengths(result);
for(i = 0; i < num_fields; i++)
{
printf("[%.*s] ", (int) lengths[i],
row[i] ? row[i] : "NULL");
}
printf("\n");
}
8.mysql_fetch_field()
下一个表字段的类型。
MYSQL_FIELD *
mysql_fetch_field(MYSQL_RES *result)
以MYSQL_FIELD结构的形式返回结果集的一列的定义。 重复调用此函数以检索有关结果集中所有列的信息。 当没有剩余的字段时,mysql_fetch_field()返回NULL。每次执行新的SELECT查询时,都会重置mysql_fetch_field()以返回有关第一个字段的信息。
返回值: 当前列的MYSQL_FIELD结构。 如果没有剩余的列,则为NULL。
9.mysql_error()
最近调用的MySQL函数的错误消息。
const char *
mysql_error(MYSQL *mysql)
返回值: 描述错误的以空字符结束的字符串。如果没有发生错误,则为空字符串。
10.mysql_num_rows()
返回结果集中的行数。
uint64_t
mysql_num_rows(MYSQL_RES *result)
11.mysql_num_fields()
返回结果集中的列数。
unsigned int
mysql_num_fields(MYSQL_RES *result)
下面给出一个示例:
MYSQL_RES *result;
unsigned int num_fields;
unsigned int num_rows;
if (mysql_query(&mysql,query_string))
{
// error
}
else // query succeeded, process any data returned by it
{
result = mysql_store_result(&mysql);
if (result) // there are rows
{
num_fields = mysql_num_fields(result);
// retrieve rows, then call mysql_free_result(result)
}
else // mysql_store_result() returned nothing; should it have?
{
if (mysql_errno(&mysql))
{
fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
}
else if (mysql_field_count(&mysql) == 0)
{
// query does not return data
// (it was not a SELECT)
num_rows = mysql_affected_rows(&mysql);
}
}
}
12.mysql_close()
关闭与服务器的连接。
void
mysql_close(MYSQL *mysql)
参考文献
1.https://dev.mysql.com/doc/c-api/8.0/en/c-api-function-reference.html