用C语言连接MySQL数据库有两个步骤:
1)初始化一个连接句柄结构
2)建立连接
函数原型:
MYSQL *mysql_init(MYSQL * mysql);
参数说明:
mysql:为NULL,则分配一个(返回其指针)。或按照传入的结构指针进行初始化。
MYSQL:返回值,若为NULL表示出错。
两种常用的方法:
MYSQL my_connection;
mysql_init(&my_connection);//以参数传出
或者
MYSQL *conn_ptr;
conn_ptr = mysql_init(NULL);//以返回值传出
可用于设置额外的连接选项,并影响连接的行为。一次设置一个,可多次调用该函数来设置数个选项。
应在mysql_init()之后、以及mysql_connect()或mysql_real_connect()之前调用mysql_options()。
函数原型:
int mysql_options(MYSQL *mysql, enum mysql_option option, const char *arg);
参数说明:
int:返回值,该函数成功时返回0。如果使用了未知选项,返回非0值。
函数原型:
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)
参数说明:
host:该值必须是主机名或IP地址。如果“host”是NULL或字符串"localhost",连接将被视为与本地主机的连接。
user:参数包含用户的MySQL登录ID。如果“user”是NULL或空字符串"",用户将被视为当前用户。在UNIX环境下,它是当前的登录名。
passwd:参数包含用户的密码。如果“passwd”是NULL,仅会对该用户的(拥有1个空密码字段的)用户表中的条目进行匹配检查。
db:是数据库名称。如果db为NULL,连接会将默认的数据库设为该值。
port:若不是0,其值将用作TCP/IP连接的端口号。
unix_socket:若不是NULL,该字符串描述了应使用的套接字或命名管道。
client_flag:的值通常为0。
MYSQL:如果连接成功,返回MYSQL*连接句柄。如果连接失败,返回NULL。对于成功的连接,返回值与第1个参数的值相同。
函数原型:
void mysql_close(MYSQL *connection);
参数说明:
函数原型:
const char *mysql_error(MYSQL *mysql)
常用结构:
if(mysql_errno(&mysql))
{
// an error occurred
}
函数原型:
unsigned int mysql_errno(MYSQL *mysql)
参数说明:
int:对于由mysql指定的连接,mysql_errno()返回最近调用的API函数的错误代码,该函数调用可能成功也可能失败。“0”返回值表示未出现错误。
函数原型:
int mysql_query(MYSQL *mysql, const char *query)
参数说明:
int:如果查询成功,返回0。如果出现错误,返回非0值。
函数原型:
my_ulonglong mysql_affected_rows(MYSQL *mysql)
参数说明:
my_ulonglong:大于0的整数表明受影响或检索的行数。“0”表示UPDATE语句未更新记录,在查询中没有与WHERE匹配的行,或未执行查询。“-1”表示查询返回错误
对于成功检索数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN),必须调用mysql_store_result()或mysql_use_result()。
mysql_use_result()将初始化结果集检索,但并不像mysql_store_result()那样将结果集实际读取到客户端。它必须通过对mysql_fetch_row()的调用,对每一行分别进行检索。这将直接从服务器读取结果,而不会将其保存在临时表或本地缓冲区内,与mysql_store_result()相比,速度更快而且使用的内存也更少。客户端仅为当前行和通信缓冲区分配内存,分配的内存可增加到max_allowed_packet字节。
使用mysql_use_result()时,必须执行mysql_fetch_row(),直至返回NULL值,否则,未获取的行将作为下一个检索的一部分返回。
函数原型:
MYSQL_RES *mysql_use_result(MYSQL *mysql)
示例代码:
MYSQL_RES * res_ptr = mysql_use_result(&my_connection);
MYSQL_ROW sqlrow;
if (res_ptr) {
while ((sqlrow = mysql_fetch_row(res_ptr))) {
printf("We inserted childno %s\n", sqlrow[0]);
}
mysql_free_result(res_ptr);
函数原型:
MYSQL_RES *mysql_store_result(MYSQL *mysql)
函数原型:
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
函数原型:
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
#include
#include
#include "mysql.h"
int main(int argc, char *argv[])
{
MYSQL *conn_ptr;
//mysql_init()
conn_ptr = mysql_init(NULL);
if (!conn_ptr) {
fprintf(stderr, "mysql_init failed\n");
return EXIT_FAILURE;
}
//mysql_real_connect()
conn_ptr = mysql_real_connect(conn_ptr, "127.0.0.1", "root", "","shellge", 0, NULL, 0);
if (conn_ptr) {
printf("Connection success\n");
} else {
printf("Connection failed\n");
}
//mysql_close()
mysql_close(conn_ptr);
return EXIT_SUCCESS;
}