c如何和mysql连接

1. 概述:

在C语言中,使用MySQL的C API库可以实现与MySQL数据库的连接。MySQL C API是使用MySQL应用程序开发的标准API,提供了一个连接MySQL的接口,通过这个接口可以实现对MySQL的访问,比如执行MySQL语句,读取MySQL中的数据等。

以下是在C中连接MySQL数据库的基本步骤:

引入MySQL C API库头文件

使用MySQL C API库中的函数链接MySQL数据库

使用SQL语句执行MySQL操作或读取MySQL数据库中的内容

关闭MySQL连接

2. 引入MySQL C API库头文件

在进行MySQL数据库连接和操作前,需要先引入MySQL C API库的头文件,头文件名称为:mysql.h。

#include<mysql.h>

3. 链接MySQL数据库

3.1 初始化MySQL

在进行MySQL连接前,需要先对MySQL进行初始化。可以使用mysql_init()函数对MySQL进行初始化,并返回一个MYSQL连接实例。

MYSQL *mysql_init(MYSQL *mysql);

其中,参数mysql是一个已经初始化了的MYSQL连接实例。如果该实例为NULL,则初始化失败。

例如,在连接MySQL数据库前,先进行MySQL初始化,代码如下:

MYSQL *conn=mysql_init(NULL);

if(conn==NULL)

{

printf("MySQL 初始化失败");

}

3.2 链接MySQL服务器

链接MySQL服务器采用mysql_real_connect()函数,该函数的定义如下:

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 clientflag);

函数参数解释如下:

mysql:mysql_init()函数返回的MYSQL连接实例指针。

host:MySQL服务器地址,如果是本地,则为localhost。

user:MySQL用户名。

passwd:MySQL用户密码。

db:MySQL数据库名称。

port:MySQL服务器端口号,默认为3306。

unix_socket:使用UNIX域套接字连接MySQL服务器时的路径。如果使用TCP/IP,必须设置为NULL。

clientflag:连接MySQL服务器时使用的选项。

例如:

MYSQL *conn=mysql_init(NULL);

if(conn==NULL)

{

printf("MySQL 初始化失败");

}

const char *server = "localhost";

const char *user = "root";

const char *password = "123456";

const char *database = "test";

unsigned int port = 3306;

if(mysql_real_connect(conn,server,user,password,database,port,NULL,0)==NULL)

{

printf("连接MySQL失败:%s",mysql_error(conn));

}

4. 执行MySQL操作或读取MySQL数据库中的内容

在成功链接MySQL之后,就可以执行MySQL语句来操作MySQL数据库或读取MySQL数据库中的数据了。

4.1 执行MySQL语句

MYSQL_QUERY()函数可以用于执行任何类型的SQL语句,但一般都是用来执行SELECT、INSERT、UPDATE等类型的SQL语句。

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

函数参数解释如下:

conn:mysql_real_connect()函数返回的指针。

stmt_str:要执行的SQL语句。

执行成功时,该函数返回0,否则返回非0值。

例如,执行一条SELECT语句:

char *sql = "SELECT * FROM `table1`";

if(mysql_query(conn,sql)!=0)

{

printf("执行SQL语句错误:%s",mysql_error(conn));

}

4.2 读取MySQL数据库中的数据

为了从MySQL数据库中读取数据,需要先将数据存储在MYSQL_RES结构体中。MYSQL_RES结构体包含了查询结果的全部信息。

当使用mysql_query()函数执行SELECT语句时,结果集指针将返回一个MYSQL_RES结构体指针。可以使用mysql_store_result()函数将结果集存储在MYSQL_RES结构体中。

MYSQL_RES *mysql_store_result(MYSQL *mysql);

例如,如下代码将对前面例子中的SELECT语句进行结果集处理:

MYSQL_RES *res;

res=mysql_store_result(conn)

if(res==NULL)

{

printf("获取结果集错误:%s",mysql_error(conn));

}

4.3 读取结果集

一旦查询的结果集存储在MYSQL_RES结构体中,就可以使用mysql_fetch_row()函数读取每一行数据。该函数返回值是一个代表结果集当前行的字符串数组。

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

例如,如下代码读取结果集中的数据:

MYSQL_ROW row;

unsigned long *lengths;

while((row=mysql_fetch_row(res))!=NULL)

{

lengths=mysql_fetch_lengths(res);

for(int i=0;i

{

printf("%.*s ",lengths[i],row[i]?row[i]:"NULL");

}

printf("\n");

}

5. 关闭MySQL连接

在完成对MySQL数据库的操作后,需要手动关闭MySQL连接。可以使用mysql_close()函数来关闭MySQL连接。

void mysql_close(MYSQL *mysql);

例如,如下代码关闭MySQL连接:

mysql_close(conn);

6. 示例代码

将上面的步骤结合起来,以下是一个简单的MySQL连接示例:

#include <mysql.h>

#include <stdio.h>

int main()

{

MYSQL *conn = mysql_init(NULL);

if(conn==NULL)

{

printf("MySQL 初始化失败");

return 1;

}

const char *server = "localhost";

const char *user = "root";

const char *password = "123456";

const char *database = "test";

unsigned int port = 3306;

if(mysql_real_connect(conn,server,user,password,database,port,NULL,0)==NULL)

{

printf("连接MySQL失败:%s",mysql_error(conn));

return 1;

}

char *sql = "SELECT * FROM `table1`";

if(mysql_query(conn,sql)!=0)

{

printf("执行SQL语句错误:%s",mysql_error(conn));

return 1;

}

MYSQL_RES *res;

res=mysql_store_result(conn);

if(res==NULL)

{

printf("获取结果集错误:%s",mysql_error(conn));

return 1;

}

MYSQL_ROW row;

unsigned long *lengths;

while((row=mysql_fetch_row(res))!=NULL)

{

lengths=mysql_fetch_lengths(res);

for(int i=0;i<mysql_num_fields(res);i++)

{

printf("%.*s ",lengths[i],row[i]?row[i]:"NULL");

}

printf("\n");

}

mysql_close(conn);

return 0;

}

后端开发标签