处理语句 _MySQL 的 C API预

来源:互联网 发布:mac 格式化移动硬盘 编辑:程序博客网 时间:2024/06/05 07:30

处理语句 _MySQL 的 C API预

转载请标明出处:http://blog.csdn.net/py_dedeopmood    本文来自 CSDN 博客。x

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

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

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

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

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

预处置语句主要使用 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_typ

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

o        void *buffer

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

 

原创粉丝点击