#include
#include
#include
int main(void)
{
//MYSQL 链接指针
MYSQL *conn_ptr;
int res;
//执行的查询语句
char querySql[100] = "select fname,age from children";
//得到查询结果集
MYSQL_RES *res_ptr;
//得到的查询结果
MYSQL_ROW sqlrow;
//初始化链接数据库
conn_ptr = mysql_init(NULL);
if(!conn_ptr)
{
fprintf(stderr,"mysql init error\n");
exit(1);
}
//链接数据库
conn_ptr = mysql_real_connect(conn_ptr,"localhost",
"root","123","test",0,NULL,0);
if(conn_ptr)
{
printf("connect sucessful\n");
}
else
{
printf("connect failture\n");
fprintf(stderr,"num is %d error is %s\n",
//获得出错的行号和出错信息 mysql_errno(conn_ptr),mysql_error(conn_ptr));
exit(1);
}
//执行SQL查询语句,不得到结果。可以执行删除和插入 等
res = mysql_query(conn_ptr,querySql);
if(0 == res)
{
printf("Data num is %d\n",
//可以得到查询操作影响的行号 (int)mysql_affected_rows(conn_ptr));
}
else
{
fprintf(stderr,"num is %d erros is %s\n",
mysql_errno(conn_ptr),mysql_error(conn_ptr));
exit(1);
}
//得到查询操作的结果集
res_ptr = mysql_use_result(conn_ptr);
if(res_ptr)
{ //处理每个结果,返回的是每行的结果
while((sqlrow = mysql_fetch_row(res_ptr)))
{
unsigned int num = 0;
//对每行结果进行输出
while(num < mysql_field_count(conn_ptr))
{
printf("row is:%s\n",sqlrow[num]);
num++;
}
}
}
//释放结果集指针
mysql_free_result(res_ptr);
//关闭数据库
mysql_close(conn_ptr);
exit(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)
mysql_real_connect()尝试与运行在主机上的MySQL数据库引擎建立连接。在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须成功完成。
参数的指定方式如下:
第1个参数应是已有MYSQL结构的地址。调用mysql_real_connect()之前,必须调用mysql_init()来初始化MYSQL结构。通过mysql_options()调用,可更改多种连接选项。
“host”的值必须是主机名或IP地址。如果“host”是NULL或字符串"localhost",连接将被视为与本地主机的连接。如果操作系统支持套接字(Unix)或命名管道(Windows),将使用它们而不是TCP/IP连接到服务器。
“user”参数包含用户的MySQL登录ID。如果“user”是NULL或空字符串"",用户将被视为当前用户。在UNIX环境下,它是当前的登录名。在Windows ODBC下,必须明确指定当前用户名。
“passwd”参数包含用户的密码。如果“passwd”是NULL,仅会对该用户的(拥有1个空密码字段的)用户表中的条目进行匹配检查。这样,数据库管理员就能按特定的方式设置MySQL权限系统,根据用户是否拥有指定的密码,用户将获得不同的权限。
MYSQL_RES *mysql_use_result(MYSQL *mysql)
对于成功检索数据的每个查询(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_ROW mysql_fetch_row(MYSQL_RES *result)
检索一个结果集合的下一行。当在mysql_store_result()之后使用时,如果没有更多的行可检索时,mysql_fetch_row()返回NULL。当在mysql_use_result()之后使用时,当没有更多的行可检索时或如果出现一个错误,mysql_fetch_row()返回NULL。
在行中值的数量由mysql_num_fields(result)给出。如果row保存了从一个对用mysql_fetch_row()调用返回的值,指向该值的指针作为row[0]到row[mysql_num_fields(result)-1]来存取。在行中的NULL值由NULL指针指出。
在行中字段值的长度可以通过调用mysql_fetch_lengths()获得。空字段和包含NULL的字段长度都是 0;你可以通过检查该值的指针区分他们。如果指针是NULL,字段是NULL;否则字段是空的。
unsigned int mysql_field_count(MYSQL *mysql);
得到当前查询的数据库的表的列的数目,即这个表有多少列数据。