文章目录

  • 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(加密协议)。该选项不应由应用程序设置,它是在客户端库内部设置的。