好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

linux下的mysql

gcc myapp.c -o myapp -L/usr/local/lib/mysql -lmysqlclient 如果glibc小于2.3.0的还需要-lz,不然提示找不到compress之类的 MYSQL : 该结构代表 1 个数据库连接的句柄。几乎所有的 MySQL 函数均使用它。不应尝试拷贝 MYSQL 结构。不保证这类拷贝结果会有

gcc myapp.c -o myapp -L/usr/local/lib/mysql -lmysqlclient

如果glibc小于2.3.0的还需要-lz,不然提示找不到compress之类的
     

MYSQL :

该结构代表 1 个数据库连接的句柄。几乎所有的 MySQL 函数均使用它。不应尝试拷贝 MYSQL 结构。不保证这类拷贝结果会有用。

MYSQL_RES :

该结构代表返回行的查询结果( SELECT, SHOW, DESCRIBE, EXPLAIN )。在本节的剩余部分,将查询返回的信息称为 “ 结果集 ” 。

MYSQL_ROW :

这是 1 行数据的 “ 类型安全 ” 表示。它目前是按照计数字节字符串的数组实施的。(如果字段值可能包含二进制数据,不能将其当作由 Null 终结的字符串对待,这是因为这类值可能会包含 Null 字节)。行是通过调用 mysql_fetch_row() 获得的。

MYSQL_FIELD :

该结构包含关于字段的信息,如字段名、类型和大小。这里详细介绍了其成员。通过重复调用 mysql_fetch_field() ,可为每个字段获得 MYSQL_FIELD 结构。字段值不是该结构的组成部份,它们包含在 MYSQL_ROW 结构中。

MYSQL_FIELD_OFFSET :

这是 MySQL 字段列表偏移量的 “ 类型安全 ” 表示(由 mysql_field_seek() 使用)。偏移量是行内的字段编号,从 0 开始。

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

1.MYSQL_STMT

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

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

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

2. MYSQL_BIND

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

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

o enum enum_field_types buffer_type

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

o void *buffer

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

o unsigned long buffer_length

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

o unsigned long *length

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

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

o my_bool *is_null

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

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

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

§ 如果数据值总是 NOT NULL ,设置 is_null = (my_bool*) 0 。

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

o my_bool is_unsigned

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

o my_bool error

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

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

MYSQL_BIND bind[3];

memset(bind, 0, sizeof(bind));

3. MYSQL_TIME

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

MYSQL_TIME 结构包含下述成员:

o unsigned int year

年份

o unsigned int month

月份

o unsigned int day

o unsigned int hour

小时

o unsigned int minute

分钟

o unsigned int second

o my_bool neg

布尔标志,用于指明时间是否为负数。

o unsigned long second_part

秒的分数部分。该成员目前不使用。

仅使用施加在给定临时类型值上的 MYSQL_TIME 结构的部分:用于 DATE 、 DATETIME 和 TIMESTAMP 的年、月、日部分。用于 TIME 、 DATETIME 和 TIMESTAMP 值的小时、分钟、秒部分。

MYSQL_TIME recdate;

MYSQL_BIND *m_param;

MYSQL_STMT *m_stmt;

MYSQL m_pDB;

CDatabase *m_pdb // 类

m_stmt = mysql_stmt_init(&(m_pdb->m_pDB))

MYSQL_STMT * mysql_stmt_init() : 初始化函数返回的 MYSQL_STMT 语句处理程序数据结构。注意返回类型。

mysql_stmt_prepare() : 为执行操作准备 SQL 字符串。

mysql_stmt_param_count() : 返回预处理 SQL 语句中的参数数目。

mysql_stmt_bind_param() : 将应用程序数据缓冲与预处理 SQL 语句中的参数标记符关联起来。

mysql_stmt_error() : 返回上次语句执行的错误消息。

mysql_stmt_execute() : 执行预处理语句。

mysql_stmt_close() : 释放预处理语句使用的内存。

调用 mysql_stmt_init() 以创建语句句柄,然后调用 mysql_stmt_prepare 准备语句,调用 mysql_stmt_bind_param() 提供参数数据,并调用 mysql_stmt_execute() 执行语句。通过更改 mysql_stmt_bind_param() 提供的相应缓冲区中的参数值,可重复执行 mysql_stmt_execute() 。

如果语句是 SELECT 或任何其他能生成结果集的语句, mysql_stmt_prepare() 也会通过 mysql_stmt_result_metadata() 以 MYSQL_RES 结果集的形式返回结果集元数据信息。

你可以使用 mysql_stmt_bind_result() 提供结果缓冲,以便 mysql_stmt_fetch() 能自动将数据返回给这些缓冲。这是一种按行获取方式。

完成语句执行后,必须使用 mysql_stmt_close() 关闭语句句柄,以便与之相关的所有资源均能被释放。

如果通过调用 mysql_stmt_result_metadata() 获得了 SELECT 语句的结果集元数据,也应使用 mysql_free_result() 释放元数据。

执行步骤:

要想准备和执行语句,应用程序必须采取下述步骤:

1. 用 msyql_stmt_init() 创建预处理语句句柄。要想在服务器上准备预处理语句,可调用 mysql_stmt_prepare() ,并为其传递包含 SQL 语句的字符串。

2. 如果语句生成了结果集,调用 mysql_stmt_result_metadata() 以获得结果集元数据。虽然与包含查询返回列的结果集不同,该元数据本身也采用了结果集的形式。元数据结果集指明了结果中包含多少列,并包含每一列的信息。

3. 使用 mysql_stmt_bind_param() 设置任何参数的值。必须设置所有参数。否则,语句执行将返回错误,或生成无法预料的结果。

4. 调用 mysql_stmt_execute() 执行语句。

5. 如果语句生成了结果集,捆绑数据缓冲,通过调用 mysql_stmt_bind_result() ,检索行值。

6. 通过重复调用 mysql_stmt_fetch() ,按行将数据提取到缓冲区,直至未发现更多行为止。

7. 通过更改参数值并再次执行语句,重复步骤 3 到步骤 6 。

调用 mysql_stmt_prepare() 时, MySQL 客户端/服务器协议将执行下述动作:

· 服务器解析语句,并通过赋值语句 ID 将 OK 状态发回客户端。此外,如果它是面向结果集的语句,还将发送总的参数数目,列计数和元数据。在此调用过程中,服务器将检查语句的所有语法和语义。

· 客户端采用该语句 ID 用于进一步操作,以便服务器能从其语句池中识别语句。

调用 mysql_stmt_execute() 时, MySQL 客户端/服务器协议将执行下述动作:

· 客户端使用语句句柄,并将参数数据发送到服务器。

· 服务器使用由客户端提供的 ID 来识别语句,用新提供的数据替换参数标记符,并执行语句。如果语句生成了结果集,服务器将数据发回客户端。否则,服务器会将发送 OK 状态,以及总的变更、删除和插入行数。

调用 mysql_stmt_fetch() 时, MySQL 客户端/服务器协议将执行下述动作:

· 客户端按行从信息包读取数据,并通过执行必要的转换操作将其放入应用程序数据缓冲中。如果应用程序的缓冲类型与服务器返回的字段类型相同,转换十分简明。

如果出现了错误,可分别使用 mysql_stmt_errno() 、 mysql_stmt_error() 和 mysql_stmt_sqlstate() 获取语句错误代码、错误消息和 SQLSTATE 值。

很好的网站:

http://dev.mysql.com/doc/refman/5.1/zh/apis.html

查看更多关于linux下的mysql的详细内容...

  阅读:33次

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网
[ SiteMap ]