在C连接mysql服务器,需要使用libmysqlclient开发包。在ubuntu系统上可以通过
命令 sudo apt-get install libsqlclient-dev 安装。
和其它和数据库访问类似,具体的过程有
1,连接数据库
2,访问数据
3,处理数据
4,断开连接
下面,接上面的顺序来了解mysql数据库编程所要用到的具体函数
一,连接数据库
1,初始化一个连接句柄
MYSQL *mysql_init(MYSQL *);
//参数如果为NULL,则分配一个新的连接句柄
2,int mysql_option(MYSQL *connection, enum option_to_set, const char *
argument);
//这个函数用来设置连接特性的,也可以不设,一切会默认。而且,每次只能设
置一个选项,想设置多个选项,则需要多次调用。 以下是三个主要的选项,其它
见手册。
枚举选项 实际参数类型 含义
MYSQL_OPT_CONNECT_TIMEOUT   常数,无符号的整数类型   中止连接前等待的秒

MYSQL_OPT_COMPRESS    无,使用NULL       在网络连接中使用压缩
MYSQL_INIT_COMMAND    常数 ,char* 连接建立以后发送的命令
3,设置及连接数据库
MYSQL *mysql_real_connect(MYSQL *connection, //连接句柄
const char *server_host, //数据库所在主机名
const char *sql_username; //访问数据库的数据名
const char *sql_password; //密码
const char *db_name; //数据库名
unsigned int port_number, //端口号,为0则使用默认(一般选择)
const char *unix_socket_name, //一般为NULL
unsigned int flags); //见说明
//它们的含意参数 的名称已经很明白了,而最后一个参数 flags只有两个参数
可供选择
CLIENT_ODBC---如果你确知ODBC正用于远程数据库,则需要用到它。
CLIENT_FOUND_ROW--???

二,执行SQL语句 mysql_query
int mysql_query(MYSQL *connection, const char *query);
利用connection对query的SQL语句执行成功,则返回 0.
三,获取数据
1,检验受影响的行数量
my_ulonglong mysql_affected_rows(MYSQL *connection);
2,检索数据
一般,我们用mysql_query发出查询,利用mysql_store_result或
mysql_use_result执行检索。再可以用mysql_fetch_row来处理数据,最后用
mysql_free_result进行整理工作。
MYSQL_RES *mysql_store_result(MYSQL *connection);
//如果执行失败则返回 NULL
实际 返回 的行数 :
my_ulonglong mysql_num_rows(MYSQL_RES *result);

获得从store result中得到的结构体,并从中检索单个行,返回给你的行结构体
中的数据。当没有更多的数据,或者出错时,将返回NULL值。
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

在結果集合中跳跃,设置由下面的fetch row选项返回 的行。区距值是一个行的
号码,这个值大于零而小于結果集合中的行数量。传递零值将会在下一次调用到
mysql_fetch_row中时返回 第一行。
void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);


得到一个区距值(off value),表明 在结果集合中当前的位置。它不是行数,所
以不能用mysql_data_seek来使用它。
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result);

在結果集合中移动当前位置,并将当前的位置返回
MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET
offset);

当使用完一个结果集合后,要使MYSQL库整理分配的对象。
void mysql_free_result(MYSQL_RES *result);


逐行检索数据
MYSQL_RES * mysql_use_result(MYSQL *connection);
//它嚅然 也是返回 一个结果集合对象,但在返回 时它实际 上并没有将任何检
索到的数据返回 到结果集合中,而仅仅是将结果集合初始化来接收数据。

注:: 为了检索数据,你必須和以前 一样反复 调用 mysql_fetch_row,直到检
索完所有的数据,如果你在一次use result调用中没有得到所有的数据,那么后面
的数据检索就损坏 了。


处理返回 的数据
得到结果集合中字段的数目。
unsigned int mysql_field_count(MYSQL *connection);



得到关于字段和字段内数据的具体信息
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result);

MYSQL_FIELD结构体的字段 含意
char *name 列的名称,字符串表示
char *table 列所在的表名称
char *def 如果调用mysql_list_field,则包含列的默认值
enum enum_field_types type 列的类型
unsigned int length 列的宽度,在定义表格时指定
unsigned int max_length 如果你使用mysql_store_result,则它包含找到的最
长的实际列长度 ,使用mysql_use_result,则不会对它进行设置
unsigned int flag 告诉你关于列的信息,通常标识有:NOT_NULL_FLAG,
PRI_KEY_FLAG,UNSIGNED_FLAG,AUTO_INCREMENT_FLAG,BINARY_FLAG.
unsigned int decimals 十进制数,只对数据字段有效。



列的几个常用类型:
FIELD_TYPE_DECIMAL
FIELD_TYPE_LONG
FIELD_TYPE_STRING
FIEDL_TYPE_VAR_STRING

宏IS_NUM,如果 字段 类型是数字形式的,则返回 真


三,断开连接及其它
void mysql_close(MYSQL *connection);

处理错误
unsigned int mysql_errno(MYSQL *connection);

char *mysql_error(MYSQL *connection);


Mysql_get_client_info char *mysql_get_client_info(void);
返回客户正在使用的库版本信息
Mysql_get_host_info char *mysql_get_host_info(MYSQL *connection);
返回服务器连接信息
Mysql_get_server_info char *mysql_get_server_info(MYSQL *connection);
返回当前 连接的服务器信息
Mysql_info char* mysql_info(MYSQL *connection)
返回 最近查询的信息,但只对几个查询类型有效,通常是INSERT和UPDATE语
句,否则返回 NULL
Mysql_select_db int mysql_select_db(MYSQL *connection, const char
*dbname);
假如用户有合适的权限,可以从默认的数据库转到由参数 設定的数据库。成
功则返回 0
Mysql_shutdown int mysql_shutdown (MYSQL *connection);
如果有合适的权限 ,可以用此来关闭所有连接的数据库服务器。成功则返回
零。