C语言实现对数据库的连接,需要执行两步。
在连接MySQL数据库服务器之前,首先调用mysql_init()函数以初始化一个连接句柄。若创建成功,则返回一个新创建的连接句柄的指针;否则返回NULL。
函数原型如下:
MYSQL *mysql_init(MYSQL *)
在调用mysql_init()函数初始化MySQL连接句柄之后,调用mysql_real_connect()函数实际进行与MySQL服务器的连接。
如果连接成功,则返回MYSQL连接句柄的指针;如果连接失败,则返回NULL。
在初始化后和实际连接数据库之前,可以调用mysql_options()函数来进行选项设置。该函数一次只能设置一个选项,所以可以多次调用调用该函数。如果选项设置成功,则返回0,如果使用类未知选项,则会设置失败,返回非0值。
当用户完成对数据库的一系列操作之后,在退出程序之前,需要调用mysql_close()函数来关闭对MySQL数据库的连接。
myslq_close()函数原型如下:
void mysql_close(MYSQL * mysql);
#include
#include "mysql/mysql.h"
int main()
{
MYSQL mysql; // need a instance to init
int t, r;
mysql_init(&mysql);
if (!mysql_real_connect(&mysql, "172.17.0.2", "root", "xxxxxx", "moddemod", 3306, NULL, 0))
{
printf("Error connecting to database: %s\n", mysql_error(&mysql));
} else {
printf("Connected MySQL successfully!\n");
}
mysql_close(&mysql);
return 0;
}
编译:
gcc -o con main.c -I /usr/include/mysql -L /usr/lib/mysql -l mysqlclient
成功连接MySQL数据库以后,就可以对数据库进行查询操作了。在MySQL API函数中,提供类两个数据库查询函数,函数的原型分别如下:
int mysql_query(MYSQL * mysql, const char *query);
int mysql_real_query(MYSQL * mysql, const char *query, unsigned long length);
mysql_real_query()辅助函数的及其用法
mysql_store_result()
将查询的全部结果读取到客户端。查询数据库成功以后,必须调用mysql_store_result()或mysql_use_result()函数
mysql_num_fields()
返回结果集中的函数
mysql_fetch_row()
检索结果集的下一行
#include
#include
#include "mysql/mysql.h"
int main()
{
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
char *query;
int flag, r; // connect the database
mysql_init(&mysql);
if (!mysql_real_connect(&mysql, "localhost", "root", "xxxxxx", "moddemod", 3306,NULL, 0))
{
printf("Failed to connect to MySQL!\n");
return 1;
}
printf("Connected MySQL successfully!\n");
query = "select * from flag"; // query
flag = mysql_real_query(&mysql, query, (unsigned int)strlen(query));
if (flag) // !0 failed
{
printf("query failed!\n");
return 1;
}
printf("[%s] made...\n", query);
res = mysql_store_result(&mysql); // save result
while (row = mysql_fetch_row(res))
{
for (int i = 0; i < mysql_num_fields(res); ++i)
{
printf("%s ", row[i]);
}
printf("\n");
}
mysql_close(&mysql);
return 0;
}