最新_MySQL 的 C API预处理语句

来源:互联网 发布:与api做数据交换 编辑:程序博客网 时间:2024/06/05 09:48

最新_MySQL 的 C API预处理语句

或从服务器直接接收这类数据。将 MYSQL_BIND 结构的 buffer_type 成员设置为临时值之一,该结构用于将 DA TE TIME DA TETIME 和 TIMESTA MP 数据直接发送到服务器。并将 buffer 成员设置为指向 MYSQL_TIME 结构,即可实现该点。

 

25.2.4. C API 预处理语句 25.2.4. C API 预处理语句 25.2.5. C API 预处理语句的数据类型

MySQL 客户端/服务器协议提供了预处理语句。该功能采用了由 mysql_stmt_init 初始化函数返回的 MYSQL_STMT 语句处置顺序数据结构。对于多次执行的语句,

<MySQL 客户端/服务器协议提供了预处理语句。该功能采用了由 mysql_stmt_init 初始化函数返回的 MYSQL_STMT 语句处置顺序数据结构。对于多次执行的语句。预处理执行是一种有效的方式。 首先对语句进行解析,为执行作好准备。接下来,以后使用初始化函数返回的语句句柄执行一次或多次。

 

预处置执行比直接执行快, 对于多次执行的语句。主要原因在于 仅对查询执行一次解析操作。直接执行的情况下,每次执行语句时,均将进行查询。此外,由于每次执行预处置语句时仅需发送参数的数据,从而减少了网络通信量。

从而使得客户端和服务器之间的数据传输更有效率。 预处理语句的另一个优点是采用了二进制协议。

不支持其他语句。 下述语句可用作预处理语句: CREA TE TA BLE DELETE DO INSERT REPLA CE SELECT SET UPDA TE 以及大多数 SHOW 语句。 MySQL 5.1 中。

 

 

 

 

 

 

 

预处置语句主要使用 MYSQL_STMT 和 MYSQL_BIND 数据结构。 第 3 种结构 MYSQL_TIME 用于传输暂时性数据。

         MYSQL_STMT

返回语句句柄,该结构表示预处理语句。通过调用 mysql_stmt_init 创建语句。即指向 MYSQL_STMT 指针。该句柄用户所有后续的与语句有关的函数,直至使用 mysql_stmt_clos 关闭了为止。

不应尝试复制 MYSQL_STMT 结构。不保证这类复制物会有用。 MYSQL_STMT 结构没有供应用程序使用的参数。此外。

多个语句句柄能够与单个连接关联起来。对句柄数目的限制取决于系统资源。

         MYSQL_BIND

与 mysql_stmt_bind_param 一起使用,该结构用于语句输入(发送给服务器的数据值)和输出(从服务器返回的结果值)对于输入。用于将参数数据值绑定到缓冲区上,以供 mysql_stmt_execut 使用。对于输出,与 mysql_stmt_bind_result 一起使用,用于绑定结果缓冲区, 以便用于 with mysql_stmt_fetch 以获取行。

但在某些时候,MYSQL_BIND 结构包括下述供应用程序使用的成员。每个成员用于输入和输出。也能用于不同的目的具体情况取决于数据传输的方向。

o        enum enum_field_typ buffer_type

buffer_type 指明了与语句参数捆绑的值类型。对于输出,缓冲的类型。本节后面列出了允许的 buffer_type 值。对于 输入。 指明了希望从结果缓冲收到值类型。

o        void *buffer

这是指向存储语句参数数据值的缓冲的指针。对于输出,对于输入。指向返回结果集列值的缓冲的指针。对于数值列类型,缓冲应指向恰当的 C 类型变量(如果将该变量与具有 UNSIGNED 属性的列关联起来, 变量 unsigned C 类型。通过使用 is_unsigned 成员,指明变量是 signed 或 unsigned 类型,详情请参见本节后面的介绍)对于日期和时间列类型,缓冲应指向 MYSQL_TIME 结构。 对于字符和二进制字符串列类型,缓冲应指向字符缓冲区。

o        unsign long buffer_length

单位为字节。 指明了可保存在缓冲区内的最大数据。对于字符和二进制 C 数据,*buffer 实际大小。 buffer_length 值指定了与 mysql_stmt_bind_param 一起使用时的 *buffer 长度,或与 mysql_stmt_bind_result 一起使用时能够提取到缓冲区内的最大数据。

o        unsign long *length

该变量指明了存储在 *buffer 中数据的实际字节数。 length 用于字符或二进制 C 数据。对于输入参数数据绑定,指向 unsign long 变量的指针。 length 指向 unsign long 变量,该变量指明了存储在 *buffer 中参数值的长度,供 mysql_stmt_execut 使用。对于 输出值绑定, mysql_stmt_fetch 会将返回的列值保存到 length 指向的 变量中。

length 将被忽略, 对于数值和临时数据类型。原因在于, 数据值的长度是由 buffer_type 值决定的

o        my_bool *is_null

如果值为 NULL 该变量为 真 如果值为非 Null 该变量为 “ 假 ” 对于输入,该成员指向 my_bool 变量。将 *is_null 设置为 “ 真 ” 指明以语句参数的形式传送 NULL 值。对于输出,如果从语句返回的结果集列值为 NULL 当获取了行后,该值将被设为 “ 真 ”

而不是布尔标量, is_nul 指向布尔类型的指针。以便能以下述方式使用它

§          如果数据值总是 NULL 使用 MYSQL_TYPE_NULL 绑定列。

§          如果数据值总是 NOT NULL 设置 is_nul = my_bool* 0

应将 is_null 设置为 my_bool 变量的地址, §          所有其他情况下。并在各次执行之间恰当地更改变量的值,以指明数据值是 NULL 或 NOT NULL

o        my_bool is_unsigned

应将 is_unsign 设置为 真 对于带符号类型,该成员用于整数类型。对应于 MYSQL_TYPE_TINY MYSQL_TYPE_SHORT MYSQL_TYPE_LONG 以及 MYSQL_TYPE_LONGLONG 类型的代码)对于无符号类型。应将其设置为 假

o        my_bool error

该成员用于通报数据截短错误。必需通过调用带有 MYSQL_REPORT_DA TA _PUNCA TION 选项的 mysql_opt 启用 截短通报功能。允许该功能后,对于输出。 mysql_stmt_fetch 返回 MYSQL_DA TA _PUNCA TED 而且对于出现截短情况的参数, MYSQL_BIND 结构中,错误标志为 真 截短指明丢失了符号或有效位数,或字符串过长以至于无法容纳在 1 列中。

应将其内容置为 0 以便初始化它然后对其进行设置,要想使用 MYSQL_BIND 结构。恰当地描述它例如,要想声明并初始化 三个 MYSQL_BIND 结构的数组,可使用下述代码:

MYSQL_BIND    bind[3];

memset bind, 0, sizeof bind ;

         MYSQL_TIME

 

原创粉丝点击