MySql5.1 C API函数描述
[1] mysql_affected_rows()
定义函数 my_ulonglong mysql_affected_rows(MYSQL *mysql)
功能 返回sql执行后影响到的行数。
返回值 影响或检索的行数。
错误 无。
示例:
mysql_query(&mysql,"UPDATE products SET cost=cost*1.25 WHERE group=10");
printf("%ld products updated",(long) mysql_affected_rows(&mysql));
[2] mysql_autocommit()
定义函数 my_bool mysql_autocommit(MYSQL *mysql, my_bool mode)
功能 如果模式为“1”,启用autocommit模式;如果模式为“0”,禁止autocommit模式。
返回值 如果返回0,错误返回非0值。
[3] mysql_change_user()
定义函数 my_bool mysql_change_user(MYSQL *mysql, const char *user, const char *password, const char *db)
功能 更改用户,并使由db指定的数据库成为由mysql指定的连接上的默认数据库(当前数据库)。
返回值 0表示成功,非0值表示出现错误。
示例:
if (mysql_change_user(&mysql, "user", "password", "new_database"))
{
fprintf(stderr, "Failed to change user. Error: %s\n",
mysql_error(&mysql));
}
[4] mysql_character_set_name()
定义函数 const char *mysql_character_set_name(MYSQL *mysql)
功能 为当前连接返回默认的字符集。
返回值 默认字符集。
[5] mysql_close()
void mysql_close(MYSQL *mysql)
功能 关闭前面打开的连接。如果句柄是由mysql_init()或mysql_connect()自动分配的,mysql_close()还将解除分配由mysql指向的连接句柄。
返回值 无。
[6] mysql_commit()
定义函数 my_bool mysql_commit(MYSQL *mysql)
功能 提交当前事务。
返回值 成功返回0,错误返回非0值。
[7] mysql_connect()
定义函数 MYSQL *mysql_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd)
功能 该函数已过时。最好使用mysql_real_connect()取而代之。
返回值 与mysql_real_connect()的相同。
[8] mysql_create_db()
定义函数 int mysql_create_db(MYSQL *mysql, const char *db)
功能 创建db参数命名的数据库。该函数过时。最好用mysql_query()来发出CREATE DATABASE语句。
返回值 成功返回0,错误返回非0值。
示例:
if(mysql_create_db(&mysql, "my_database"))
{
fprintf(stderr, "Failed to create new database. Error: %s\n",
mysql_error(&mysql));
}
[9] mysql_data_seek()
定义函数 void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset)
功能 在查询结果集中寻找任意行。偏移值为行号,范围从0到mysql_num_rows(result)-1。
返回值 无。
[10] mysql_debug()
定义函数 void mysql_debug(const char *debug)
功能 用给定的字符串执行DBUG_PUSH。mysql_debug()采用Fred Fish调试库。要想使用该函数,必须编译客户端库,使之支持调试功能。请参见E.1节,“调试MySQL服务器”。请参见E.2节,“调试MySQL客户端”。
返回值 无。
示例: 这里给出的调用将使客户端库在客户端机器的/tmp/client.trace中生成1个跟踪文件。
mysql_debug("d:t:O,/tmp/client.trace");
[11] mysql_drop_db()
定义函数 int mysql_drop_db(MYSQL *mysql, const char *db)
功能 撤销由db参数命名数据库。 该函数已过时。最好用mysql_query()来删除数据库
返回值 如果成功撤销了数据库,返回0。如果出现错误,返回非0值。
示例:
if(mysql_drop_db(&mysql, "my_database"))
fprintf(stderr, "Failed to drop the database: Error: %s\n",
mysql_error(&mysql));
[12] mysql_dump_debug_info()
定义函数 int mysql_dump_debug_info(MYSQL *mysql)
功能 指示服务器将一些调试信息写入日志。要想使之工作,已连接的用户必须具有SUPER权限。
返回值 如果命令成功,返回0。如果出现错误,返回非0值。
[13] mysql_eof()
定义函数 my_bool mysql_eof(MYSQL_RES *result)
功能 mysql_eof()确定是否读取到结果集最后1行。该函数已过时。应使用mysql_errno()或mysql_error()取而代之。
函数说明
如果通过成功调用mysql_store_result()获得了结果集,客户端将在1次操作中收到整个结果集。在该情况下,从mysql_fetch_row()返回的NULL总表示已到达结果集末尾,而且没必要调用mysql_eof()。与mysql_store_result()一起使用时,mysql_eof()总返回“真”。
另一方面,如果你使用mysql_use_result()来初始化结果集检索,当重复调用mysql_fetch_row()时,将逐个地从服务器获取结果集的行。由于在该过程中,可能出现连接上的错误,从mysql_fetch_row()返回的NULL值不一定表示已正常地抵达结果集末尾。在该情况下,可以使用mysql_eof()来判定出现了什么情况。如果抵达结果集末尾,mysql_eof()返回非0值,如果出现错误,返回0。
返回值 错误返回0,如果抵达结果集的末尾,返回非0值。
示例:
在下面的示例中,介绍了使用mysql_eof()的方法:
mysql_query(&mysql,"SELECT * FROM some_table");
result = mysql_use_result(&mysql);
while((row = mysql_fetch_row(result)))
{
// do something with data
}
if(!mysql_eof(result)) // mysql_fetch_row() failed due to an error
{
fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
}
但是,你也能使用标准的MySQL错误函数实现相同的结果:
mysql_query(&mysql,"SELECT * FROM some_table");
result = mysql_use_result(&mysql);
while((row = mysql_fetch_row(result)))
{
// do something with data
}
if(mysql_errno(&mysql)) // mysql_fetch_row() failed due to an error
{
fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
}
[14] mysql_errno()
定义函数 unsigned int mysql_errno(MYSQL *mysql)
功能 mysql_errno()返回最近调用的API函数的错误代码,该函数调用可能成功也可能失败。“0”返回值表示未出现错误。在MySQL errmsg.h头文件中,列出了客户端错误消息编号。
注意 如果成功,某些函数,如mysql_fetch_row()等,不会设置mysql_errno()。
经验规则是,如果成功,所有向服务器请求信息的函数均会复位mysql_errno()。
返回值 失败,返回上次mysql_xxx()调用的错误代码。“0”表示未出现错误。
[15] mysql_error()
定义函数 const char *mysql_error(MYSQL *mysql)
功能 对于失败的最近调用的API函数,mysql_error()返回包含错误消息的、由Null终结的字符串。如果该函数未失败,mysql_error()的返回值可能是以前的错误,或指明无错误的空字符串。
说明 经验规则是,如果成功,所有向服务器请求信息的函数均会复位mysql_error()。
对于复位mysql_errno()的函数,下述两个测试是等效的:
if(mysql_errno(&mysql))
{
// an error occurred
}
if(mysql_error(&mysql)[0] != '\0')
{
// an error occurred
}
返回值
返回描述错误的、由Null终结的字符串。如果未出现错误,返回空字符串。
[16] mysql_escape_string()
应使用mysql_real_escape_string()取而代之!
该函数与mysql_real_escape_string()等同,但mysql_real_escape_string()会将连接处理程序作为其第1个参量,并按照当前字符集对字符串进行转义处理。mysql_escape_string()不采用连接参量,而且不考虑当前字符集设置。
[17] mysql_fetch_field()
定义函数 MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)
功能 返回采用MYSQL_FIELD结构的结果集的列。重复调用该函数,以检索关于结果集中所有列的信息。未剩余字段时,mysql_fetch_field()返回NULL。
每次执行新的SELECT查询时,将复位mysql_fetch_field(),以返回关于第1个字段的信息。调用mysql_field_seek()也会影响mysql_fetch_field()返回的字段。
返回值 当前列的MYSQL_FIELD结构。如果未剩余任何列,返回NULL。
示例:
MYSQL_FIELD *field;
while((field = mysql_fetch_field(result)))
{
printf("field name %s\n", field->name);
}
[18] mysql_fetch_field_direct()
定义函数 MYSQL_FIELD *mysql_fetch_field_direct(MYSQL_RES *result, unsigned int fieldnr)
功能 给定结果集内某1列的字段编号fieldnr,以MYSQL_FIELD结构形式返回列的字段定义。Fieldnr的值应在从0到mysql_num_fields(result)-1的范围内。
返回值 对于指定列,返回MYSQL_FIELD结构。
示例:
unsigned int num_fields;
unsigned int i;
MYSQL_FIELD *field;
num_fields = mysql_num_fields(result);
for(i = 0; i < num_fields; i++)
{
field = mysql_fetch_field_direct(result, i);
printf("Field %u is %s\n", i, field->name);
}
[19] mysql_fetch_fields()
定义函数 MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)
功能 对于结果集,返回所有MYSQL_FIELD结构的数组。每个结构提供了结果集中1列的字段定义。
返回值 关于结果集所有列的MYSQL_FIELD结构的数组。
示例:
unsigned int num_fields;
unsigned int i;
MYSQL_FIELD *fields;
num_fields = mysql_num_fields(result);
fields = mysql_fetch_fields(result);
for(i = 0; i < num_fields; i++)
{
printf("Field %u is %s\n", i, fields[i].name);
}
[20] mysql_fetch_lengths()
定义函数 unsigned long *mysql_fetch_lengths(MYSQL_RES *result)
功能 返回结果集内当前行的列的长度。如果打算复制字段值,该长度信息有助于优化,这是因为,你能避免调用strlen()。此外,如果结果集包含二进制数据,必须使用该函数来确定数据的大小,原因在于,对于包含Null字符的任何字段,strlen()将返回错误的结果。
对于空列以及包含NULL值的列,其长度为0。要想了解区分这两类情况的方法,请参见关于mysql_fetch_row()的介绍。
返回值 无符号长整数的数组表示各列的大小(不包括任何终结NULL字符)。如果出现错误,返回NULL。
示例:
MYSQL_ROW row;
unsigned long *lengths;
unsigned int num_fields;
unsigned int i;
row = mysql_fetch_row(result);
if (row)
{
num_fields = mysql_num_fields(result);
lengths = mysql_fetch_lengths(result);
for(i = 0; i < num_fields; i++)
{
printf("Column %u is %lu bytes in length.\n", i, lengths[i]);
}
}
[21] mysql_fetch_row()
定义函数 MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
功能 检索结果集的下一行。
返回值 下一行的MYSQL_ROW结构。如果没有更多要检索的行或出现了错误,返回NULL。
示例:
MYSQL_ROW row;
unsigned int num_fields;
unsigned int i;
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
unsigned long *lengths;
lengths = mysql_fetch_lengths(result);
for(i = 0; i < num_fields; i++)
{
printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
}
printf("\n");
}
[22] mysql_field_count()
定义函数 unsigned int mysql_field_count(MYSQL *mysql)
功能 返回作用在连接上的最近查询的列数。
函数说明 该函数的正常使用是在mysql_store_result()返回NULL(因而没有结果集指针)时。在这种情况下,可调用mysql_field_count()来判定mysql_store_result()是否应生成非空结果。这样,客户端就能采取恰当的动作,而无需知道查询是否是SELECT(或类似SELECT的)语句。在这里给出的示例中,演示了完成它的方法。
返回值 表示结果集中列数的无符号整数。
示例:
MYSQL_RES *result;
unsigned int num_fields;
unsigned int num_rows;
if (mysql_query(&mysql,query_string))
{
// error
}
else // query succeeded, process any data returned by it
{
result = mysql_store_result(&mysql);
if (result) // there are rows
{
num_fields = mysql_num_fields(result);
// retrieve rows, then call mysql_free_result(result)
}
else // mysql_store_result() returned nothing; should it have?
{
if(mysql_field_count(&mysql) == 0)
{
// query does not return data
// (it was not a SELECT)
num_rows = mysql_affected_rows(&mysql);
}
else // mysql_store_result() should have returned data
{
fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
}
}
}
另一种可选的方法是,用mysql_errno(&mysql)替换mysql_field_count(&mysql)调用。在该情况下,无论语句是否是SELECT,你将直接从mysql_store_result()查找错误,而不是从mysql_field_count()的值进行推断。
[23] mysql_field_seek()
定义函数 MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET offset)
功能 将字段光标设置到给定的偏移处
返回值
字段光标的前一个值。
[24] mysql_field_tell()
MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES *result)
功能 返回上一个mysql_fetch_field()所使用的字段光标的定义。该值可用作mysql_field_seek()的参量。
返回值 字段光标的当前偏移量。
[25] mysql_free_result()
定义函数 void mysql_free_result(MYSQL_RES *result)
功能 释放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等为结果集分配的内存。完成对结果集的操作后,必须调用mysql_free_result()释放结果集使用的内存。
释放完成后,不要尝试访问结果集。
返回值 无。
[26] mysql_get_character_set_info()
定义函数 void mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *cs)
功能 该函数提供了关于默认客户端字符集的信息。可以使用mysql_set_character_set()函数更改默认的字符集。该函数是在MySQL 5.0.10中增加的。
示例:
if (!mysql_set_character_set(&mysql, "utf8"))
{
MY_CHARSET_INFO cs;
mysql_get_character_set_info(&mysql, &cs);
printf("character set information:\n");
printf("character set name: %s\n", cs.name);
printf("collation name: %s\n", cs.csname);
printf("comment: %s\n", cs.comment);
printf("directory: %s\n", cs.dir);
printf("multi byte character min. length: %d\n", cs.mbminlen);
printf("multi byte character max. length: %d\n", cs.mbmaxlen);
}
[27] mysql_get_client_info()
定义函数 char *mysql_get_client_info(void)
功能 返回表示客户端库版本的字符串。
返回值 表示MySQL客户端库版本的字符串。
[28] mysql_get_client_version()
定义函数 unsigned long mysql_get_client_version(void)
功能 返回表示客户端库版本的整数。该值的格式是XYYZZ,其中X是主版本号,YY是发布级别,ZZ是发布级别内的版本号。例如,值40102表示客户端库的版本是4.1.2。
返回值 表示MySQL客户端库版本的整数。
[29] mysql_get_host_info()
char *mysql_get_host_info(MYSQL *mysql)
功能 返回描述了所使用连接类型的字符串,包括服务器主机名。
返回值 代表服务器主机名和连接类型的字符串。
[30] mysql_get_proto_info()
定义函数 unsigned int mysql_get_proto_info(MYSQL *mysql)
功能 返回当前连接所使用的协议版本。
返回值 代表当前连接所使用协议版本的无符号整数。
[31] mysql_get_server_info()
char *mysql_get_server_info(MYSQL *mysql)
功能 返回代表服务器版本号的字符串。
返回值 代表服务器版本号的字符串。
[32] mysql_get_server_version()
定义函数 unsigned long mysql_get_server_version(MYSQL *mysql)
功能 以整数形式返回服务器的版本号。
返回值 表示MySQL服务器版本的数值,格式如下:
major_version*10000 + minor_version *100 + sub_version
例如,对于5.0.12,返回500012。
在客户端程序中,为了快速确定某些与版本相关的服务器功能是否存在,该函数很有用。
[33] mysql_hex_string()
定义函数 unsigned long mysql_hex_string(char *to, const char *from, unsigned long length)
功能 该函数用于创建可用在SQL语句中的合法SQL字符串。请参见9.1.1节,“字符串”。
说明 该字符串从形式上编码为十六进制格式,每个字符编码为2个十六进制数。结果被置入其中,并添加1个终结Null字节。
“from”所指向的字符串必须是长度字节“long”。必须为“to”分配缓冲区,缓冲区至少为length*2+1字节长。当mysql_hex_string()返回时,“to”的内容为由Null终结的字符串。返回值是编码字符串的长度,不包括终结用Null字符。
可采用0xvalue或X'value'格式将返回值置于SQL语句中。但是,返回值不包括0x或X'...'。调用者必须提供所希望的格式是何种。
示例:
char query[1000],*end;
end = strmov(query,"INSERT INTO test_table values(");
end = strmov(end,"0x");
end += mysql_hex_string(end,"What's this",11);
end = strmov(end,",0x");
end += mysql_hex_string(end,"binary data: \0\r\n",16);
*end++ = ')';
if (mysql_real_query(&mysql,query,(unsigned int) (end - query)))
{
fprintf(stderr, "Failed to insert row, Error: %s\n",
mysql_error(&mysql));
}
示例中所使用的strmov()函数包含在mysqlclient库中,它的工作方式类似于strcpy(),但返回指向第1个参数终结Null的指针。
返回值 置于“to”中的值的长度,不包括终结用Null字符。
[34] mysql_info()
定义函数 char *mysql_info(MYSQL *mysql)
功能 检索字符串,该字符串提供了关于最近执行查询的信息,但仅对这里列出的语句有效。对于其他语句,mysql_info()返回NULL。字符串的格式取决于查询的类型,如本节所述。数值仅是说明性的,字符串包含与查询相适应的值。
返回值 字符串,它表示最近所执行查询的额外信息。如果该查询无可用信息,返回NULL。
[35] mysql_init()
定义函数 MYSQL *mysql_init(MYSQL *mysql)
功能 分配或初始化与mysql_real_connect()相适应的MYSQL对象。
返回值 初始化的MYSQL*句柄。如果无足够内存以分配新的对象,返回NULL。
[36] mysql_insert_id()
定义函数 my_ulonglong mysql_insert_id(MYSQL *mysql)
功能 返回由以前的INSERT或UPDATE语句为AUTO_INCREMENT列生成的值。在包含AUTO_INCREMENT字段的表中执行了INSERT语句后,应使用该函数。
返回值 在前面的讨论中予以了介绍。
[37] mysql_kill()
定义函数 int mysql_kill(MYSQL *mysql, unsigned long pid)
功能 请求服务器杀死由pid指定的线程。
返回值 0表示成功,非0值表示出现错误。
[38] mysql_library_end()
定义函数 void mysql_library_end(void)
功能
它是mysql_server_end()函数的同义词。
[39] mysql_library_init()
定义函数 int mysql_library_init(int argc, char **argv, char **groups)
功能 这是mysql_server_init()函数的同义词。
[40] mysql_list_dbs()
定义函数 MYSQL_RES *mysql_list_dbs(MYSQL *mysql, const char *wild)
功能 返回由服务器上的数据库名称组成的结果集,该服务器与由通配符参数指定的简单正则表达式匹配。通配符参数可以包含通配符“%”或“_”,也可以是NULL指针,以便与所有的数据库匹配。调用mysql_list_dbs()的方法类似于执行查询SHOW database [LIKE wild]。
必须用mysql_free_result()释放结果集。
返回值 成功后返回MYSQL_RES结果集。如果出现错误,返回NULL。
[41] mysql_list_fields()
定义函数 MYSQL_RES *mysql_list_fields(MYSQL *mysql, const char *table, const char *wild)
功能 返回由给定表中的字段名称组成的结果集,给定表与由通配符参数指定的简单正则表达式匹配。通配符参数可以包含通配符“%”或“_”,也可以是NULL指针,以便与所有的字段匹配。调用mysql_list_fields()的方法类似于执行查询SHOW COLUMNS FROM tbl_name [LIKE wild]。
注意 建议使用SHOW COLUMNS FROM tbl_name,而不是mysql_list_fields()。
返回值 如果成功,返回MYSQL_RES结果集。如果出现错误,返回NULL。
[42] mysql_list_processes()
定义函数 MYSQL_RES *mysql_list_processes(MYSQL *mysql)
功能 返回描述当前服务器线程的结果集。必须用mysql_free_result()释放结果集。
返回值 如果成功,返回MYSQL_RES结果集。如果出现错误,返回NULL。
[43] mysql_list_tables()
定义函数 MYSQL_RES *mysql_list_tables(MYSQL *mysql, const char *wild)
功能 返回由当前数据库内的表名组成的结果集,当前数据库与由通配符参数指定的简单正则表达式匹配。通配符参数可以包含通配符“%”或“_”,也可以是NULL指针,以便与所有的表匹配。调用mysql_list_tables()的方法类似于执行查询HOW tables [LIKE wild]。
说明 必须用mysql_free_result()释放结果集。
返回值 如果成功返回MYSQL_RES结果集。 如果出现错误,返回NULL。
[44] mysql_more_results()
定义函数 my_bool mysql_more_results(MYSQL *mysql)
功能 如果当前执行的查询存在多个结果,返回“真”,而且应用程序必须调用mysql_next_result()来获取结果。
返回值 如果存在多个结果,返回“真”(1),如果不存在多个结果,返回“假”(0)。
[45] mysql_next_result()
定义函数 int mysql_next_result(MYSQL *mysql)
功能 如果存在多个查询结果,mysql_next_result()将读取下一个查询结果,并将状态返回给应用程序。
如果前面的查询返回了结果集,必须为其调用mysql_free_result()。
返回值 0 成功并有多个结果。-1 成功但没有多个结果。>0 出错
[46] mysql_num_fields()
定义函数 unsigned int mysql_num_fields(MYSQL_RES *result)
功能 返回结果集中的行数。
返回值 表示结果集中行数的无符号整数。
示例: 同22
[47] mysql_num_rows()
定义函数 my_ulonglong mysql_num_rows(MYSQL_RES *result)
功能 返回结果集中的行数。
返回值 结果集中的行数。
[48] mysql_options()
定义函数 int mysql_options(MYSQL *mysql, enum mysql_option option, const char *arg)
功能 可用于设置额外的连接选项,并影响连接的行为。可多次调用该函数来设置数个选项。
应在mysql_init()之后、以及mysql_connect()或mysql_real_connect()之前调用mysql_options()。
返回值 成功时返回0。如果使用了未知选项,返回非0值。
示例:
MYSQL mysql;
mysql_init(&mysql);
mysql_options(&mysql,MYSQL_OPT_COMPRESS,0);
mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"odbc");
if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))
{
fprintf(stderr, "Failed to connect to database: Error: %s\n",
mysql_error(&mysql));
}
[49] mysql_ping()
定义函数 int mysql_ping(MYSQL *mysql)
功能 检查与服务器的连接是否工作。如果连接丢失,将自动尝试再连接。该函数可被闲置了较长时间的客户端使用,用以检查服务器是否已关闭了连接,并在必要时再次连接。
返回值 如果与服务器的连接有效返回0。如果出现错误,返回非0值。返回的非0值不表示MySQL服务器本身是否已关闭,连接可能因其他原因终端,如网络问题等。
[50] mysql_query()
定义函数 int mysql_query(MYSQL *mysql, const char *query)
功能 执行由“Null终结的字符串”查询指向的SQL查询。如果希望了解查询是否应返回结果集,可使用mysql_field_count()进行检查。请参见25.2.3.22节,“mysql_field_count()”。
返回值 如果查询成功,返回0。如果出现错误,返回非0值。
[51] 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 client_flag)
功能 mysql_real_connect()尝试与运行在主机上的MySQL数据库引擎建立连接。在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须成功完成。
参数的指定方式如下:
· 第1个参数应是已有MYSQL结构的地址。调用mysql_real_connect()之前,必须调用mysql_init()初始化MYSQL结构。通过mysql_options()调用,可更改多种连接选项。
· “host”的值必须是主机名或IP地址。
· “user”参数包含用户的MySQL登录ID。
· “passwd”参数包含用户的密码。
· “db”是数据库名称。如果db为NULL,连接会将默认的数据库设为该值。
· 如果“port”不是0,其值将用作TCP/IP连接的端口号。注意,“host”参数决定了连接的类型。
· 如果unix_socket不是NULL,该字符串描述了应使用的套接字或命名管道。注意,“host”参数决定了连接的类型。
· client_flag的值通常为0,但是,也能将其设置为下述标志的组合,以允许特定功能。具体参数值请查看相关资料。
· 对于host,指定NULL值或空字符串("")。
· 对于user,指定NULL值或空字符串。
· 对于passwd,指定NULL值。(对于密码,mysql_real_connect()调用中的空字符串的值不能被选项文件中的字符串覆盖,这是因为,空字符串明确指明MySQL账户必须有空密码)。
· 对于db,指定NULL值或空字符串
· 对于port,指定“0”值。
· 对于unix_socket,指定NULL值。
对于某一参数,如果在选项文件中未发现值,将使用它的默认值,如本节前面介绍的那样。
返回值 如果连接成功,返回MYSQL*连接句柄。如果连接失败,返回NULL。
示例:
MYSQL mysql;
mysql_init(&mysql);
mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"your_prog_name");
if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))
{
fprintf(stderr, "Failed to connect to database: Error: %s\n",
mysql_error(&mysql));
}
[52] mysql_real_escape_string()
定义函数 unsigned long mysql_real_escape_string(MYSQL *mysql, char *to, const char *from, unsigned long length)
功能 该函数用于创建可在SQL语句中使用的合法SQL字符串。
示例:
char query[1000],*end;
end = strmov(query,"INSERT INTO test_table values(");
*end++ = '\'';
end += mysql_real_escape_string(&mysql, end,"What's this",11);
*end++ = '\'';
*end++ = ',';
*end++ = '\'';
end += mysql_real_escape_string(&mysql, end,"binary data: \0\r\n",16);
*end++ = '\'';
*end++ = ')';
if (mysql_real_query(&mysql,query,(unsigned int) (end - query)))
{
fprintf(stderr, "Failed to insert row, Error: %s\n",
mysql_error(&mysql));
}
该示例中使用的strmov()函数包含在mysqlclient库中,工作方式与strcpy()类似,但会返回指向第1个参数终结用Null的指针。
返回值 置于“to”中的值的长度,不包括终结用Null字符。
[53] mysql_real_query()
定义函数 int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length)
功能 执行由“query”指向的SQL查询,它应是字符串长度字节“long”。正常情况下,字符串必须包含1条SQL语句,而且不应为语句添加终结分号(‘;’)或“\g”。如果允许多语句执行,字符串可包含由分号隔开的多条语句。对于包含二进制数据的查询,必须使用mysql_real_query()而不是mysql_query(),这是因为,二进制数据可能会包含‘\0’字符。此外,mysql_real_query()比mysql_query()快,这是因为它不会在查询字符串上调用strlen()。
返回值 如果查询成功,返回0。如果出现错误,返回非0值。
[54] mysql_refresh()
定义函数 int mysql_refresh(MYSQL *mysql, unsigned int options)
功能 该函数用于刷新表或高速缓冲,或复位复制服务器信息。连接的用户必须具有RELOAD权限。
返回值 0表示成功,非0值表示出现错误。
[55] mysql_reload()
定义函数 int mysql_reload(MYSQL *mysql)
功能 请求MySQL服务器重新加载授权表。连接的用户必须具有RELOAD权限。该函数已过时。最好使用mysql_query()来发出SQL FLUSH PRIVILEGES语句。
返回值 0表示成功,非0值表示出现错误。
[56] mysql_rollback()
定义函数 my_bool mysql_rollback(MYSQL *mysql)
功能 回滚当前事务。
返回值 如果成功返回0,如果出现错误,返回非0值。
[57] mysql_row_seek()
定义函数 MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset)
功能 将行光标置于查询结果集中的任意行。“offset”值是行偏移量,它应是从mysql_row_tell()或mysql_row_seek()返回的值。该值不是行编号,如果你打算按编号查找结果集中的行,请使用mysql_data_seek()。
返回值 行光标的前一个值。该值可传递给对mysql_row_seek()的后续调用。
[58] mysql_row_tell()
定义函数 MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result)
功能 对于上一个mysql_fetch_row(),返回行光标的当前位置。该值可用作mysql_row_seek()的参量。
仅应在mysql_store_result()之后,而不是mysql_use_result()之后使用mysql_row_tell()。
返回值 行光标的当前偏移量。
[59] mysql_select_db()
定义函数 int mysql_select_db(MYSQL *mysql, const char *db)
功能 使由db指定的数据库成为由mysql指定的连接上的默认数据库(当前数据库)。
返回值 0表示成功,非0值表示出现错误。
[60] mysql_set_character_set()
定义函数 int mysql_set_character_set(MYSQL *mysql, char *csname)
功能 该函数用于为当前连接设置默认的字符集。
返回值 0表示成功,非0值表示出现错误。
示例:
MYSQL mysql;
mysql_init(&mysql);
if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))
{
fprintf(stderr, "Failed to connect to database: Error: %s\n",
mysql_error(&mysql));
}
if (!mysql_set_charset_name(&mysql, "utf8"))
{
printf("New client character set: %s\n", mysql_character_set_name(&mysql));
}
[61] mysql_set_server_option()
int mysql_set_server_option(MYSQL *mysql, enum enum_mysql_set_option option)
功能 允许或禁止连接的选项。
返回值 0表示成功,非0值表示出现错误。
[62] mysql_shutdown()
定义函数 int mysql_shutdown(MYSQL *mysql, enum enum_shutdown_level shutdown_level)
功能 请求数据库服务器关闭。
返回值 0表示成功,非0值表示出现错误。
[63] mysql_sqlstate()
定义函数 const char *mysql_sqlstate(MYSQL *mysql)
功能 返回由Null终结的字符串,该字符串包含关于上次错误的SQLSTATE错误代码。
返回值 包含SQLSTATE错误码的、由Null终结的字符串。
[64] mysql_ssl_set()
定义函数 int mysql_ssl_set(MYSQL *mysql, const char *key, const char *cert, const char *ca, const char *capath, const char *cipher)
功能 使用mysql_ssl_set(),可采用SSL建立安全连接。必须在mysql_real_connect()之前调用它。除非在客户端库中允许了OpenSSL支持,否则mysql_ssl_set()不作任何事。
参数说明:
· Mysql是从mysql_init()返回的连接处理程序。
· key是key文件的路径名。
· cert是证书文件的路径名。
· ca是证书授权文件的路径名。
· capath是指向目录的路径名,该目录中包含以pem格式给出的受信任SSL CA证书。
· cipher是允许密码的列表,用于SSL加密。
对于任何未使用的SSL参数,可为其给定NULL。
返回值 该函数总返回0。如果SSL设置不正确,当你尝试连接时,mysql_real_connect()将返回错误。
[65] mysql_stat()
定义函数 char *mysql_stat(MYSQL *mysql)
功能 返回包含特定信息的字符串,该信息与mysqladmin status命令提供的信息类似。包括以秒为单位的正常运行时间,以及运行线程的数目,问题数,再加载次数,以及打开的表数目。
返回值 描述服务器状态的字符集。如果出现错误,返回NULL。
[66] mysql_store_result()
定义函数 MYSQL_RES *mysql_store_result(MYSQL *mysql)
功能 对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必须调用mysql_store_result()或mysql_use_result() 。
返回值 具有多个结果的MYSQL_RES结果集合。如果出现错误,返回NULL。
[67] mysql_thread_id()
定义函数 unsigned long mysql_thread_id(MYSQL *mysql)
功能 返回当前连接的线程ID。该值可用作mysql_kill()的参量以杀死线程。
如果连接丢失,并使用mysql_ping()进行了再连接,线程ID将改变。这意味着你不应获取线程ID并保存它供以后使用。应在需要时获取它。
返回值 当前连接的线程ID。
[68] mysql_use_result()
定义函数 MYSQL_RES *mysql_use_result(MYSQL *mysql)
功能 对于成功检索数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN),必须调用mysql_store_result()或mysql_use_result()。
返回值 MYSQL_RES结果结构。如果出现错误,返回NULL。
[69] mysql_warning_count()
定义函数 unsigned int mysql_warning_count(MYSQL *mysql)
返回值 告警计数。