最新_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预处理语句

25.2.4. C API预处理语句MySQL客户端/服务器协议提供了预处理语句。该功能采用了由mysql_stmt_init()初始化函数返回的MYSQL_STMT语句处理程序数据结构。对于多次执行...
  • leibniz_zsu
  • leibniz_zsu
  • 2007年05月27日 19:59
  • 9744

MYSQL预处理语句

对于多次执行的语句,预处理执行比直接执行快,主要原因在于,仅对查询执行一次解析操作。在直接执行的情况下,每次执行语句时,均将进行查询。此外,由于每次执行预处理语句时仅需发送参数的数据,从而减少了网络通...
  • cao478208248
  • cao478208248
  • 2014年04月15日 12:42
  • 856

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

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

利用sql预处理语句 防止sql注入

写一个简单的登陆系统 前端代码 登录页面 username: password: > 后台提交至 doLogin.php ...
  • grace_fang
  • grace_fang
  • 2017年10月12日 13:19
  • 127

mysql预处理学习和总结

1、  Mysql预处理简介 预处理的意思是先提交sql语句到mysql服务端,执行预编译,客户端执行sql语句时,只需上传输入参数即可,这点和存储过程有点相似。 一般而言,预处理的执行效...
  • sanjiaozhen
  • sanjiaozhen
  • 2015年09月20日 18:04
  • 2022

关闭 java中预处理PrepareStatement为什么能起到防止SQL注入的作用

大家都知道,java中JDBC中,有个预处理功能,这个功能一大优势就是能提高执行速度尤其是多次操作数据库的情况,再一个优势就是预防SQL注入,严格的说,应该是预防绝大多数的SQL注入。     ...
  • luman1991
  • luman1991
  • 2016年09月26日 15:12
  • 233

MySQL预处理语句

MySQL预处理语句 一:设置一个预处理语句:prepare stmt1 from 'select * from t1 where id>?'; 二:设置一个变量:set @=i1; ...
  • leyangjun
  • leyangjun
  • 2014年08月11日 15:25
  • 683

The MySQL C API编程实例

在网上找了一些MYSQL C API编程的文章,看了后觉得还是写的不够充分,根据自己经验写了这篇《The MySQL C API 编程实例》,希望对需要调用到MYSQL的C的API的朋友有所帮助,附例...
  • weiqubo
  • weiqubo
  • 2013年11月04日 16:21
  • 1834

MySQL入门之常用C语言API

数据类型 MYSQL 该结构代表1个数据库连接的句柄。几乎所有的MYSQL函数均使用它。 MYSQL_RES 该结构代表返回行的查询结果 MYSQL_ROW 这是1行数据的"类型安全"表示。 MYSQ...
  • lzjsqn
  • lzjsqn
  • 2017年01月12日 23:03
  • 1845

MYSQL C PI预处理语句

 25.2.4. C API预处理语句MySQL客户端/服务器协议提供了预处理语句。该功能采用了由mysql_stmt_init()初始化函数返回的MYSQL_STMT语句处理程序数据结构。对于多次执...
  • fafa211
  • fafa211
  • 2009年03月09日 21:36
  • 2916
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最新_MySQL 的 C API预处理语句
举报原因:
原因补充:

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