文章目录
- 1 Mysql数据类型
- MYSQL
- MYSQL_RES
- MYSQL_ROW
- MYSQL_FIELD
- MYSQL_FIELD_OFFSET
- 2 字段标志
- 3 API概述
- 4 API详解
- mysql_fetch_field
- mysql_init
- mysql_num_fields
- mysql_num_rows
- mysql_options
- mysql_query
- mysql_real_connect
1 Mysql数据类型
MYSQL
该结构代表1个数据库连接的句柄。几乎所有的MySQL函数均使用它。不应尝试拷贝MYSQL结构。不保证这类拷贝结果会有用。
MYSQL_RES
- 原型:
typedef struct st_mysql_res {
my_ulonglong row_count;
MYSQL_FIELD *fields;
MYSQL_DATA *data;
MYSQL_ROWS *data_cursor;
unsigned long *lengths; /* column lengths of current row */
MYSQL *handle; /* for unbuffered reads */
const struct st_mysql_methods *methods;
MYSQL_ROW row; /* If unbuffered read */
MYSQL_ROW current_row; /* buffer to current row */
MEM_ROOT field_alloc;
unsigned int field_count, current_field;
my_bool eof; /* Used by mysql_fetch_row */
/* mysql_stmt_close() had to cancel this result */
my_bool unbuffered_fetch_cancelled;
void *extension;
} MYSQL_RES;
- 描述:该结构代表返回行的查询结果(SELECT, SHOW, DESCRIBE, EXPLAIN)。
MYSQL_ROW
- 原型:
typedef char **MYSQL_ROW;
- 描述:一个字符串数组,所有得数据类型都被转换成字符串送到客户端。
- 相关API:
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
MYSQL_FIELD
- 原型:
typedef struct st_mysql_field {
char *name; /* Name of column */
char *org_name; /* Original column name, if an alias */
char *table; /* Table of column if column was a field */
char *org_table; /* Org table name, if table was an alias */
char *db; /* Database for table */
char *catalog; /* Catalog for table */
char *def; /* Default value (set by mysql_list_fields) */
unsigned long length; /* Width of column (create length) */
unsigned long max_length; /* Max width for selected set */
unsigned int name_length;
unsigned int org_name_length;
unsigned int table_length;
unsigned int org_table_length;
unsigned int db_length;
unsigned int catalog_length;
unsigned int def_length;
unsigned int flags; /* Div flags */
unsigned int decimals; /* Number of decimals in field */
unsigned int charsetnr; /* Character set */
enum enum_field_types type; /* Type of field. See mysql_com.h for types */
void *extension;
} MYSQL_FIELD;
- 描述:该结构包含关于字段的信息,如字段名、类型和大小。(不包含字段值, 字段值在MYSQL_ROW中)
- 相关API:
MYSQL_FIELD * STDCALL mysql_fetch_field(MYSQL_RES *result);
MYSQL_FIELD_OFFSET
- 原型:
typedef unsigned int MYSQL_FIELD_OFFSET;
- 描述:这是MySQL字段列表偏移量的“类型安全”表示(由mysql_field_seek()使用)。偏移量是行内的字段编号,从0开始。
- 相关API:
MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET offset);
2 字段标志
标志值 | 标志描述 |
NOT_NULL_FLAG | 字段不能为NULL |
PRI_KEY_FLAG | 字段是主键的组成部分 |
UNIQUE_KEY_FLAG | 字段是唯一键的组成部分 |
MULTIPLE_KEY_FLAG | 字段是非唯一键的组成部分 |
UNSIGNED_FLAG | 字段具有UNSIGNED属性 |
ZEROFILL_FLAG | 字段具有ZEROFILL属性 |
BINARY_FLAG | 字段具有BINARY属性 |
AUTO_INCREMENT_FLAG | 字段具有AUTO_INCREMENT属性 |
ENUM_FLAG | 字段是ENUM(不再重视) |
SET_FLAG | 字段是SET(不再重视) |
BLOB_FLAG | 字段是BLOB或TEXT(不再重视) |
TIMESTAMP_FLAG | 字段是TIMESTAMP(不再重视) |
3 API概述
API | 描述 |
mysql_affected_rows() | 返回上次UPDATE、DELETE或INSERT查询更改/删除/插入的行数 |
mysql_autocommit() | 切换 autocommit模式,ON/OFF |
mysql_change_user() | 更改打开连接上的用户和数据库 |
mysql_charset_name() | 返回用于连接的默认字符集的名称 |
mysql_close() | 关闭服务器连接 |
mysql_commit() | 提交事务 |
mysql_connect() | 连接到MySQL服务器。该函数已不再被重视,使用mysql_real_connect()取代 |
mysql_create_db() | 创建数据库。该函数已不再被重视,使用SQL语句CREATE DATABASE取而代之 |
mysql_data_seek() | 在查询结果集中查找属性行编号 |
mysql_debug() | 用给定的字符串执行DBUG_PUSH |
mysql_drop_db() | 撤销数据库。该函数已不再被重视,使用SQL语句DROP DATABASE取而代之 |
mysql_dump_debug_info() | 让服务器将调试信息写入日志 |
mysql_eof() | 确定是否读取了结果集的最后一行。该函数已不再被重视,可以使用mysql_errno()或mysql_error()取而代之 |
mysql_errno() | 返回上次调用的MySQL函数的错误编号 |
mysql_error() | 返回上次调用的MySQL函数的错误消息 |
mysql_escape_string() | 为了用在SQL语句中,对特殊字符进行转义处理 |
mysql_fetch_field() | 返回下一个表字段的类型 |
mysql_fetch_field_direct() | 给定字段编号,返回表字段的类型 |
mysql_fetch_fields() | 返回所有字段结构的数组 |
mysql_fetch_lengths() | 返回当前行中所有列的长度 |
mysql_fetch_row() | 从结果集中获取下一行 |
mysql_field_seek() | 将列光标置于指定的列 |
mysql_field_count() | 返回上次执行语句的结果列的数目 |
mysql_field_tell() | 返回上次mysql_fetch_field()所使用字段光标的位置 |
mysql_free_result() | 释放结果集使用的内存 |
mysql_get_client_info() | 以字符串形式返回客户端版本信息 |
mysql_get_client_version() | 以整数形式返回客户端版本信息 |
mysql_get_host_info() | 返回描述连接的字符串 |
mysql_get_server_version() | 以整数形式返回服务器的版本号 |
mysql_get_proto_info() | 返回连接所使用的协议版本 |
mysql_get_server_info() | 返回服务器的版本号 |
mysql_info() | 返回关于最近所执行查询的信息 |
mysql_init() | 获取或初始化MYSQL结构 |
mysql_insert_id() | 返回上一个查询为AUTO_INCREMENT列生成的ID |
mysql_kill() | 杀死给定的线程 |
mysql_library_end() | 最终确定MySQL C API库 |
mysql_library_init() | 初始化MySQL C API库 |
mysql_list_dbs() | 返回与简单正则表达式匹配的数据库名称 |
mysql_list_fields() | 返回与简单正则表达式匹配的字段名称 |
mysql_list_processes() | 返回当前服务器线程的列表 |
mysql_list_tables() | 返回与简单正则表达式匹配的表名 |
mysql_more_results() | 检查是否还存在其他结果 |
mysql_next_result() | 在多语句执行过程中返回/初始化下一个结果 |
mysql_num_fields() | 返回结果集中的列数 |
mysql_num_rows() | 返回结果集中的行数 |
mysql_options() | 为mysql_connect()设置连接选项 |
mysql_ping() | 检查与服务器的连接是否工作,如有必要重新连接 |
mysql_query() | 执行指定为“以Null终结的字符串”的SQL查询 |
mysql_real_connect() | 连接到MySQL服务器 |
mysql_real_escape_string() | 考虑到连接的当前字符集,为了在SQL语句中使用,对字符串中的特殊字符进行转义处理 |
mysql_real_query() | 执行指定为计数字符串的SQL查询 |
mysql_refresh() | 刷新或复位表和高速缓冲 |
mysql_reload() | 通知服务器再次加载授权表 |
mysql_rollback() | 回滚事务 |
mysql_row_seek() | 使用从mysql_row_tell()返回的值,查找结果集中的行偏移 |
mysql_row_tell() | 返回行光标位置 |
mysql_select_db() | 选择数据库 |
mysql_server_end() | 最终确定嵌入式服务器库 |
mysql_server_init() | 初始化嵌入式服务器库 |
mysql_set_server_option() | 为连接设置选项(如多语句) |
mysql_sqlstate() | 返回关于上一个错误的SQLSTATE错误代码 |
mysql_shutdown() | 关闭数据库服务器 |
mysql_stat() | 以字符串形式返回服务器状态 |
mysql_store_result() | 检索完整的结果集至客户端 |
mysql_thread_id() | 返回当前线程ID |
mysql_thread_safe() | 如果客户端已编译为线程安全的,返回1 |
mysql_use_result() | 初始化逐行的结果集检索 |
mysql_warning_count() | 返回上一个SQL语句的告警数 |
4 API详解
mysql_fetch_field
- 原型:
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)
- 描述:返回采用MYSQL_FIELD结构的结果集的列信息。
- 参数:
result:返回的结果集。 - 返回值:当前列的MYSQL_FIELD结构。如果未剩余任何列,返回NULL。
mysql_init
- 原型:
MYSQL *mysql_init(MYSQL *mysql)
- 描述:分配或初始化与mysql_real_connect()相适应的MYSQL对象。如果mysql是NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。如果mysql_init()分配了新的对象,当调用mysql_close()来关闭连接时。将释放该对象。
- 返回值:初始化的MYSQL*句柄。如果无足够内存以分配新的对象,返回NULL。
mysql_num_fields
- 原型:
unsigned int mysql_num_fields(MYSQL_RES *result)
- 描述:获取返回的结果集中有几列数据,
- 参数:
result:返回的结果集。 - 返回值:结果集中的列数。
mysql_num_rows
- 原型:
my_ulonglong mysql_num_rows(MYSQL_RES *result)
- 描述:获取返回的结果集中有几行数据。
- 参数:
result:返回的结果集。 - 返回值:结果集中的行数。
mysql_options
- 原型:
int mysql_options(MYSQL *mysql, enum mysql_option option, const char *arg)
- 描述:用于设置额外的连接选项,并影响连接的行为。可多次调用该函数来设置数个选项。
- 参数:
mysql:初始化过的MYSQL结构。
arg:选项参数的值。
option:选项参数,说明如下表。 - 返回值:成功返回0,否则返回非0值。
选项 | 参量类型 | 功能 |
MYSQL_INIT_COMMAND | char * | 连接到MySQL服务器时将执行的命令。再次连接时将自动地再次执行。 |
MYSQL_OPT_COMPRESS | 未使用 | 使用压缩客户端/服务器协议 |
MYSQL_OPT_CONNECT_TIMEOUT | unsigned int * | 以秒为单位的连接超时。 |
MYSQL_OPT_GUESS_CONNECTION | 未使用 | 对于与libmysqld链接的应用程序,允许库“猜测”是否使用嵌入式服务器或远程服务器。“猜测”表示,如果设置了主机名但不是本地主机,将使用远程服务器。该行为是默认行为。 可使用MYSQL_OPT_USE_EMBEDDED_CONNECTION 和MYSQL_OPT_USE_REMOTE_CONNECTION覆盖它。对于与libmysqlclient链接的应用程序,该选项将被忽略。 |
MYSQL_OPT_LOCAL_INFILE | 指向单元的可选指针 | 如果未给定指针,或指针指向“unsigned int != 0”,将允许命令LOAD LOCAL INFILE。 |
MYSQL_OPT_NAMED_PIPE | 未使用 | 使用命名管道连接到NT平台上的MySQL服务器。 |
MYSQL_OPT_PROTOCOL | unsigned int * | 要使用的协议类型。应是mysql.h中定义的mysql_protocol_type的枚举值之一。 |
MYSQL_OPT_READ_TIMEOUT | unsigned int * | 从服务器读取信息的超时(目前仅在Windows平台的TCP/IP连接上有效)。 |
MYSQL_OPT_RECONNECT | my_bool * | 如果发现连接丢失,启动或禁止与服务器的自动再连接。从MySQL 5.0.3开始,默认情况下禁止再连接,这是5.0.13中的新选项,提供了一种以显式方式设置再连接行为的方法。 |
MYSQL_OPT_SET_CLIENT_IP | char * | 对于与libmysqld链接的应用程序(具备鉴定支持特性的已编译libmysqld),它意味着,出于鉴定目的,用户将被视为从指定的IP地址(指定为字符串)进行连接。对于与libmysqlclient链接的应用程序,,该选项将被忽略。 |
MYSQL_OPT_USE_EMBEDDED_CONNECTION | 未使用 | 对于与libmysqld链接的应用程序,对于连接来说,它将强制使用嵌入式服务器。对于与libmysqlclient链接的应用程序,,该选项将被忽略。 |
MYSQL_OPT_USE_REMOTE_CONNECTION | 未使用 | 对于与libmysqld链接的应用程序,对于连接来说,它将强制使用远程服务器。对于与libmysqlclient链接的应用程序,,该选项将被忽略。 |
MYSQL_OPT_USE_RESULT | 未使用 | 不使用该选项。 |
MYSQL_OPT_WRITE_TIMEOUT | unsigned int * | 写入服务器的超时(目前仅在Windows平台的TCP/IP连接上有效)。 |
MYSQL_READ_DEFAULT_FILE | char * | 从命名选项文件而不是从my.cnf读取选项。 |
MYSQL_READ_DEFAULT_GROUP | char * | 从my.cnf或用MYSQL_READ_DEFAULT_FILE指定的文件中的命名组读取选项。 |
MYSQL_REPORT_DATA_TRUNCATION | my_bool * | 通过MYSQL_BIND.error,对于预处理语句,允许或禁止通报数据截断错误(默认为禁止)。 |
MYSQL_SECURE_AUTH | my_bool* | 是否连接到不支持密码混编功能的服务器,在MySQL 4.1.1和更高版本中,使用了密码混编功能。 |
MYSQL_SET_CHARSET_DIR | char* | 指向包含字符集定义文件的目录的路径名。 |
MYSQL_SET_CHARSET_NAME | char* | 用作默认字符集的字符集的名称。 |
MYSQL_SHARED_MEMORY_BASE_NAME | char* | 命名为与服务器进行通信的共享内存对象。应与你打算连接的mysqld服务器使用的选项“-shared-memory-base-name”相同。 |
mysql_query
- 原型:
int mysql_query(MYSQL *mysql, const char *query)
- 描述:查询指向的SQL查询,mysql_query()不能用于包含二进制数据的查询,应使用mysql_real_query()取而代之(二进制数据可能包含字符‘\0’,mysql_query()会将该字符解释为查询字符串结束)。
- 参数:
mysql:由mysql_real_connect()连接成功的数据库
query:SQL查询语句,正常情况下,字符串必须包含1条SQL语句,而且不应为语句添加终结分号 ; 或 \g 。如果允许多语句执行,字符串可包含多条由 ; 隔开的语句。 - 返回值:成功,返回0。错误,返回非0值。
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数据库引擎建立连接,在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,连接必须成功完成。
- 参数:
mysql:由mysql_init()初始化成功的MYSQL结构的地址
host:主机名或IP地址
user:用户的MySQL登录ID
passwd:用户的密码
db:数据库名称,如果db为NULL,连接会将默认的数据库设为该值
port:TCP/IP连接的端口号
unix_socket:如果不是NULL,则该字符串描述了应使用的套接字或命名管道
client_flag:值通常为0,也能将其设置为下述标志的组合,以允许特定功能:
标志名称 | 标志描述 |
CLIENT_COMPRESS | 使用压缩协议。 |
CLIENT_FOUND_ROWS | 返回发现的行数(匹配的),而不是受影响的行数。 |
CLIENT_IGNORE_SPACE | 允许在函数名后使用空格。使所有的函数名成为保留字。 |
CLIENT_INTERACTIVE | 关闭连接之前,允许interactive_timeout(取代了wait_timeout)秒的不活动时间。客户端的会话wait_timeout变量被设为会话interactive_timeout变量的值。 |
CLIENT_LOCAL_FILES | 允许LOAD DATA LOCAL处理功能。 |
CLIENT_MULTI_STATEMENTS | 通知服务器,客户端可能在单个字符串内发送多条语句(由‘;’隔开)。如果未设置该标志,将禁止多语句执行。 |
CLIENT_MULTI_RESULTS | 通知服务器,客户端能够处理来自多语句执行或存储程序的多个结果集。如果设置了CLIENT_MULTI_STATEMENTS,将自动设置它。 |
CLIENT_NO_SCHEMA | 禁止db_name.tbl_name.col_name语法。它用于ODBC。如果使用了该语法,它会使分析程序生成错误,在捕获某些ODBC程序中的缺陷时,它很有用。 |
CLIENT_ODBC | 客户端是ODBC客户端。它将mysqld变得更为ODBC友好。 |
CLIENT_SSL | 使用SSL(加密协议)。该选项不应由应用程序设置,它是在客户端库内部设置的。 |