最新_MySQL 的 C API预处理语句

原创 2011年01月13日 00:39:00

最新_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

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Mysql C API 使用(一)

本文使用使用mysql 5.7.11+vs2013完成 下载安装mysql,可以参考我的博文。将头文件所在目录include添加到项目的包含目录。将库目录放到项目的库目录。向链接器->输入中添加:...

Mysql C API 使用(二)简单的sql语句执行&dbvisualizer设置自动提示

初始化及连接成功简单的sql语句执行 查询://查询 if (mysql_query(conn, "select * from newtable")){ print_error(conn, "m...

C 链接mysql---预处理语句

C 链接 mysql的预处理语句 先说几个数据结构: MYSQL_STMT 该数据结构表示预处理语句。由mysql_stmt_init()创建语句 MYSQL_BIND  -这个数据结构非...

MySQL - 动态SQL与预处理语句

在存储过程或者函数中,有时SQL语句是通过变量传值生成的。这时候就需要使用动态SQL,如果直接在SQL语句中植入变量,将提示无该字段或表。如下所示:v_db 和v_table均是变量传值动态生成。cr...

SQlite数据库的C编程接口(三) 预处理语句(Prepared Statements) ——《Using SQlite》读书笔记 .

SQlite数据库的C编程接口(三) 预处理语句(Prepared Statements)  by斜风细雨QQ:253786989    2012-02-04   SQlite3数据库连接完...

SQlite数据库的C编程接口(三) 预处理语句(Prepared Statements) ——《Using SQlite》读书笔记 .

[转自http://blog.csdn.net/northcan/article/details/7232941] SQlite数据库的C编程接口(三) 预处理语句(Prepared Sta...

SQlite数据库的C编程接口(三) 预处理语句(Prepared Statements) ——《Using SQlite》读书笔记 .

SQlite数据库的C编程接口(三) 预处理语句(Prepared Statements)  by斜风细雨QQ:253786989    2012-02-04   SQlite3数据库连接完...

第71篇 一对多自由控制语音(二)及PHP MySQL 预处理语句

关键词:一对多自由控制语音, PHP MySQL 预处理语句 一、一对多自由控制语音 1.1 在demos2下面 https://192.168.1.14:9001/demos2/Stream...

MySQL入门之预处理语句的使用

MySQL客户端/服务器协议提供了预处理语句。该功能采用了由mysql_stmt_init()初始化函数返回的MYSQL_STMT语句处理程序数据结构。对于多次执行的语句,预处理执行是一种有效的方式。...
  • lzjsqn
  • lzjsqn
  • 2017-01-13 16:49
  • 1148

pdo通过预处理语句防止sql注入

本文会通过一个简单的登录验证来演示通过预处理语句防注入。 数据库:test; 创建表:CREATE TABLE USER( id INT UNSIGNED AUTO_INCREMENT KEY, u...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)