⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 月光软件站 - 编程文档 - 其他语言 - 详细的mysql c api [转].htm

📁 cmpp开发文档 cmpp开发文档
💻 HTM
📖 第 1 页 / 共 5 页
字号:
    <td align="middle" width="100%" bgColor="#888888" height="1"></td>
  </tr>
  <tr>
    <td width="100%" height="2"></td>
  </tr>
  <tr>
    <td width="100%" height="38">
    <p align="center"><B>作者</B>:未知  <B>来源</B>:月光软件站<!--未知-->  <B>加入时间</B>:2005-2-28 月光软件站</td>
  </tr>
  <tr>
    <td width="100%" valign="top"><TABLE style="TABLE-LAYOUT: fixed" cellSpacing=0 cellPadding=0 width="100%">
<TBODY>
<TR>
<TD vAlign=top width=32></TD>
<TD style="LEFT: 0px; WIDTH: 100%; WORD-WRAP: break-word; 130: ">
<TABLE style="TABLE-LAYOUT: fixed" height=120 cellSpacing=0 cellPadding=0 width="100%">
<TBODY>
<TR vAlign=top>
<TD style="LEFT: 0px; WIDTH: 100%; WORD-WRAP: break-word; 130: "><FONT color=#555555>来源&nbsp; <A href="http://www.leftworld.net/">http://www.leftworld.net/</A><BR><BR><B style='color:black;background-color:#A0FFFF'>C</B> <B style='color:black;background-color:#99ff99'>API</B>代码是随<B style='color:black;background-color:#ffff66'>MySQL</B>分发的,它被包含在mysqlclient库且允许<B style='color:black;background-color:#A0FFFF'>C</B>程序存取一个数据库。 
<P>在 <B style='color:black;background-color:#ffff66'>MySQL</B>源代码分发中的很多客户是用<B style='color:black;background-color:#A0FFFF'>C</B>编写的。如果你正在寻找演示怎样使用<B style='color:black;background-color:#A0FFFF'>C</B> <B style='color:black;background-color:#99ff99'>API</B>的例子,看一下这些客户程序。 
<P>大多数其他客户 <B style='color:black;background-color:#99ff99'>API</B>(除了Java的所有)都使用mysqlclient库与<B style='color:black;background-color:#ffff66'>MySQL</B>服务器通信。这意味着,例如,你能利用很多被其他客户程序使用的同一环境变量,因为他们从库中引用。对这些变量的一张表,见12.1 不同的<B style='color:black;background-color:#ffff66'>MySQL</B>程序的概述。 
<P>客户有一个最大通讯缓冲区大小。初始分配的缓冲区大小(16K字节) 自动地增加到最大尺寸(缺省的最大值是24M)。因为缓冲区大小只是按保证需求而被增加,简单地增加缺省的最大限制并不造成更多被消耗。该尺寸检查主要是一个对错误的查询和通讯包的检查。 
<P>通讯缓冲区必须足够大以便一个单独的SQL语句(对客户-服务器传输)和一行返回的数据(对服务器-客户传输)。每个线程的通讯缓冲区被动态扩大到最大限制来处理任何查询或行。例如,如果你包含大到16M数据的BLOB值,你必须有一个至少16M通讯缓冲区限制(在服务器和客户两端)。客户的缺省最大值是24M,但是在服务器端的缺省最大值是1M。你可以在服务器启动时通过改变max_allowed_packet参数的值来改变它。见10.2.3 调节服务器参数。 
<P><B style='color:black;background-color:#ffff66'>MySQL</B>服务器在每个查询后缩小每个通讯缓冲区到net_buffer_length个字节。对客户,与一个连接相关的缓冲区的大小没被减少,直到连接被关闭,在此时客户内存被回收。 
<P>如果你用线程的编程,你应该用--with-thread-safe-client编译<B style='color:black;background-color:#ffff66'>MySQL</B> <B style='color:black;background-color:#A0FFFF'>C</B> <B style='color:black;background-color:#99ff99'>API</B>,这将使<B style='color:black;background-color:#A0FFFF'>C</B> <B style='color:black;background-color:#99ff99'>API</B>线程对每个连接更安全。你可以让2个线程共享相同的连接,只要如果你做下列事情: 
<P>两个线程不能同时在同一个连接上发送查询到<B style='color:black;background-color:#ffff66'>MySQL</B>。特别是你必须保证在一个<B style='color:black;background-color:#ffff66'>mysql</B>_query()和<B style='color:black;background-color:#ffff66'>mysql</B>_store_result()之间没有其他线程正在使用同一个连接。 <BR>许多线程能存取用<B style='color:black;background-color:#ffff66'>mysql</B>_store_result()检索出来的不同结果集合。 <BR>如果你使用<B style='color:black;background-color:#ffff66'>mysql</B>_use_result,你必须保证没有其他线程在同一个连接上正在询问任何东西,直到结果集合被关闭。 <BR>20.2 <B style='color:black;background-color:#A0FFFF'>C</B> <B style='color:black;background-color:#99ff99'>API</B>数据类型<BR><B style='color:black;background-color:#ffff66'>MYSQL</B> <BR>这个结构表示对一个数据库连接的句柄,它被用于几乎所有的<B style='color:black;background-color:#ffff66'>MySQL</B>函数。 <BR><B style='color:black;background-color:#ffff66'>MYSQL</B>_RES <BR>这个结构代表返回行的一个查询的(SELECT, SHOW, DESCRIBE, EXPLAIN)的结果。从查询返回的信息在本章下文称为结果集合。 <BR><B style='color:black;background-color:#ffff66'>MYSQL</B>_ROW <BR>这是一个行数据的类型安全(type-safe)的表示。当前它实现为一个计数字节的字符串数组。(如果字段值可能包含二进制数据,你不能将这些视为空终止串,因为这样的值可以在内部包含空字节) 行通过调用<B style='color:black;background-color:#ffff66'>mysql</B>_fetch_row()获得。 <BR><B style='color:black;background-color:#ffff66'>MYSQL</B>_FIELD <BR>这个结构包含字段信息,例如字段名、类型和大小。其成员在下面更详细地描述。你可以通过重复调用<B style='color:black;background-color:#ffff66'>mysql</B>_fetch_field()对每一列获得<B style='color:black;background-color:#ffff66'>MYSQL</B>_FIELD结构。字段值不是这个结构的部分;他们被包含在一个<B style='color:black;background-color:#ffff66'>MYSQL</B>_ROW结构中。 <BR><B style='color:black;background-color:#ffff66'>MYSQL</B>_FIELD_OFFSET <BR>这是一个相对一个<B style='color:black;background-color:#ffff66'>MySQL</B>字段表的偏移量的类型安全的表示。(由<B style='color:black;background-color:#ffff66'>mysql</B>_field_seek()使用。) 偏移量是在一行以内的字段编号,从0开始。 <BR>my_ulonglong <BR>该类型用于行编号和<B style='color:black;background-color:#ffff66'>mysql</B>_affected_rows()、<B style='color:black;background-color:#ffff66'>mysql</B>_num_rows()和<B style='color:black;background-color:#ffff66'>mysql</B>_insert_id()。这种类型提供0到1.84e19的一个范围。在一些系统上,试图打印类型my_ulonglong的值将不工作。为了打印出这样的值,将它变换到unsigned long并且使用一个%lu打印格式。例如:<BR>printf (Number of rows: %lu\n", (unsigned long) <B style='color:black;background-color:#ffff66'>mysql</B>_num_rows(result)); 
<P><B style='color:black;background-color:#ffff66'>MYSQL</B>_FIELD结构包含列在下面的成员: 
<P>char * name <BR>字段名,是一个空结尾的字符串。 <BR>char * table <BR>包含该字段的表的名字,如果它不是可计算的字段。对可计算的字段,table值是一个空字符串。 <BR>char * def <BR>这字段的缺省值,是一个空结尾的字符串。只要你使用,只有你使用<B style='color:black;background-color:#ffff66'>mysql</B>_list_fields()才可设置它。 <BR>enum enum_field_types type <BR>字段类型。type值可以是下列之一:类型值 &nbsp;类型含义 <BR>FIELD_TYPE_TINY &nbsp;TINYINT字段 <BR>FIELD_TYPE_SHORT &nbsp;SMALLINT字段 <BR>FIELD_TYPE_LONG &nbsp;INTEGER字段 <BR>FIELD_TYPE_INT24 &nbsp;MEDIUMINT字段 <BR>FIELD_TYPE_LONGLONG &nbsp;BIGINT字段 <BR>FIELD_TYPE_DECIMAL &nbsp;DECIMAL或NUMERIC字段 <BR>FIELD_TYPE_FLOAT &nbsp;FLOAT字段 <BR>FIELD_TYPE_DOUBLE &nbsp;DOUBLE或REAL字段 <BR>FIELD_TYPE_TIMESTAMP &nbsp;TIMESTAMP字段 <BR>FIELD_TYPE_DATE &nbsp;DATE字段 <BR>FIELD_TYPE_TIME &nbsp;TIME字段 <BR>FIELD_TYPE_DATETIME &nbsp;DATETIME字段 <BR>FIELD_TYPE_YEAR &nbsp;YEAR字段 <BR>FIELD_TYPE_STRING &nbsp;字符串(CHAR或VARCHAR)字段 <BR>FIELD_TYPE_BLOB &nbsp;BLOB或TEXT字段(使用max_length决定最大长度) <BR>FIELD_TYPE_SET &nbsp;SET字段 <BR>FIELD_TYPE_ENUM &nbsp;ENUM字段 <BR>FIELD_TYPE_NULL &nbsp;NULL- 类型字段 <BR>FIELD_TYPE_CHAR &nbsp;不推荐;使用FIELD_TYPE_TINY代替 
<P>你可以使用IS_NUM()宏来测试字段是否有一种数字类型。将type值传给IS_NUM()并且如果字段是数字的,它将计算为TRUE: 
<P>if (IS_NUM(field-&gt;type))<BR>&nbsp; &nbsp;printf("Field is numeric\n"); 
<P>unsigned int length <BR>字段宽度,在表定义中指定。 <BR>unsigned int max_length <BR>对结果集合的字段的最大宽度(对实际在结果集合中的行的最长字段值的长度)。如果你使用<B style='color:black;background-color:#ffff66'>mysql</B>_store_result()或<B style='color:black;background-color:#ffff66'>mysql</B>_list_fields(),这包含字段最大长度。如果你使用<B style='color:black;background-color:#ffff66'>mysql</B>_use_result(),这个变量的值是零。 <BR>unsigned int flags <BR>字段的不同位标志。flags值可以是零个或多个下列位设置:标志值 &nbsp;标志含义 <BR>NOT_NULL_FLAG &nbsp;字段不能是NULL &nbsp;<BR>PRI_KEY_FLAG &nbsp;字段是一个主键的一部分 <BR>UNIQUE_KEY_FLAG &nbsp;字段是一个唯一键的一部分 <BR>MULTIPLE_KEY_FLAG &nbsp;字段是一个非唯一键的一部分。 &nbsp;<BR>UNSIGNED_FLAG &nbsp;字段有UNSIGNED属性 <BR>ZEROFILL_FLAG &nbsp;字段有ZEROFILL属性 <BR>BINARY_FLAG &nbsp;字段有BINARY属性 <BR>AUTO_INCREMENT_FLAG &nbsp;字段有AUTO_INCREMENT属性 <BR>ENUM_FLAG &nbsp;字段是一个ENUM(不推荐) <BR>BLOB_FLAG &nbsp;字段是一个BLOB或TEXT(不推荐) <BR>TIMESTAMP_FLAG &nbsp;字段是一个TIMESTAMP(不推荐) 
<P>BLOB_FLAG、ENUM_FLAG和TIMESTAMP_FLAG标志的使用是不推荐的,因为他们指出字段的类型而非它的类型属性。对FIELD_TYPE_BLOB、FIELD_TYPE_ENUM或FIELD_TYPE_TIMESTAMP,最好是测试field-&gt;type。下面例子演示了一个典型的flags值用法: 
<P>if (field-&gt;flags &amp; NOT_NULL_FLAG)<BR>&nbsp; &nbsp;printf("Field can't be null\n"); 
<P>你可以使用下列方便的宏决来确定flags值的布尔状态: 
<P>IS_NOT_NULL(flags) &nbsp;真,如果该字段被定义为NOT NULL &nbsp;<BR>IS_PRI_KEY(flags) &nbsp;真,如果该字段是一个主键 <BR>IS_BLOB(flags) &nbsp;真,如果该字段是一个BLOB或TEXT(不推荐;相反测试field-&gt;type) 
<P>unsigned int decimals <BR>对数字字段的小数位数。 <BR>20.3 <B style='color:black;background-color:#A0FFFF'>C</B> <B style='color:black;background-color:#99ff99'>API</B>函数概述<BR>在 <B style='color:black;background-color:#A0FFFF'>C</B> <B style='color:black;background-color:#99ff99'>API</B> 中可用的函数列在下面,并且在下一节更详细地描述。见20.4 <B style='color:black;background-color:#A0FFFF'>C</B> <B style='color:black;background-color:#99ff99'>API</B>函数描述。 
<P><B style='color:black;background-color:#ffff66'>mysql</B>_affected_rows() &nbsp;返回被最新的UPDATE, DELETE或INSERT查询影响的行数。 <BR><B style='color:black;background-color:#ffff66'>mysql</B>_close() &nbsp;关闭一个服务器连接。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_connect() &nbsp;连接一个<B style='color:black;background-color:#ffff66'>MySQL</B>服务器。该函数不推荐;使用<B style='color:black;background-color:#ffff66'>mysql</B>_real_connect()代替。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_change_user() &nbsp;改变在一个打开的连接上的用户和数据库。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_create_db() &nbsp;创建一个数据库。该函数不推荐;而使用SQL命令CREATE DATABASE。 <BR><B style='color:black;background-color:#ffff66'>mysql</B>_data_seek() 在一个查询结果集合中搜寻一任意行。 <BR><B style='color:black;background-color:#ffff66'>mysql</B>_debug() 用给定字符串做一个DBUG_PUSH。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_drop_db() 抛弃一个数据库。该函数不推荐;而使用SQL命令DROP DATABASE。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_dump_debug_info() 让服务器将调试信息写入日志文件。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_eof() 确定是否已经读到一个结果集合的最后一行。这功能被反对; <B style='color:black;background-color:#ffff66'>mysql</B>_errno()或<B style='color:black;background-color:#ffff66'>mysql</B>_error()可以相反被使用。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_errno() 返回最近被调用的<B style='color:black;background-color:#ffff66'>MySQL</B>函数的出错编号。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_error() 返回最近被调用的<B style='color:black;background-color:#ffff66'>MySQL</B>函数的出错消息。 <BR><B style='color:black;background-color:#ffff66'>mysql</B>_escape_string() &nbsp;用在SQL语句中的字符串的转义特殊字符。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_fetch_field() 返回下一个表字段的类型。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_fetch_field_direct () 返回一个表字段的类型,给出一个字段编号。 <BR><B style='color:black;background-color:#ffff66'>mysql</B>_fetch_fields() 返回一个所有字段结构的数组。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_fetch_lengths() 返回当前行中所有列的长度。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_fetch_row() 从结果集合中取得下一行。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_field_seek() 把列光标放在一个指定的列上。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_field_count() 返回最近查询的结果列的数量。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_field_tell() 返回用于最后一个<B style='color:black;background-color:#ffff66'>mysql</B>_fetch_field()的字段光标的位置。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_free_result() 释放一个结果集合使用的内存。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_get_client_info() 返回客户版本信息。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_get_host_info() &nbsp;返回一个描述连接的字符串。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_get_proto_info() 返回连接使用的协议版本。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_get_server_info() 返回服务器版本号。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_info() &nbsp;返回关于最近执行得查询的信息。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_init() 获得或初始化一个<B style='color:black;background-color:#ffff66'>MYSQL</B>结构。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_insert_id() 返回有前一个查询为一个AUTO_INCREMENT列生成的ID。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_kill() 杀死一个给定的线程。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_list_dbs() 返回匹配一个简单的正则表达式的数据库名。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_list_fields() 返回匹配一个简单的正则表达式的列名。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_list_processes() 返回当前服务器线程的一张表。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_list_tables() 返回匹配一个简单的正则表达式的表名。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_num_fields() 返回一个结果集合重的列的数量。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_num_rows() 返回一个结果集合中的行的数量。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_options() 设置对<B style='color:black;background-color:#ffff66'>mysql</B>_connect()的连接选项。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_ping() 检查对服务器的连接是否正在工作,必要时重新连接。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_query() 执行指定为一个空结尾的字符串的SQL查询。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_real_connect() 连接一个<B style='color:black;background-color:#ffff66'>MySQL</B>服务器。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_real_query() 执行指定为带计数的字符串的SQL查询。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_reload() 告诉服务器重装授权表。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_row_seek() 搜索在结果集合中的行,使用从<B style='color:black;background-color:#ffff66'>mysql</B>_row_tell()返回的值。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_row_tell() 返回行光标位置。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_select_db() 连接一个数据库。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_shutdown() 关掉数据库服务器。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_stat() 返回作为字符串的服务器状态。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_store_result() 检索一个完整的结果集合给客户。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_thread_id() 返回当前线程的ID。 &nbsp;<BR><B style='color:black;background-color:#ffff66'>mysql</B>_use_result() 初始化一个一行一行地结果集合的检索。 &nbsp; 
<P>为了连接服务器,调用<B style='color:black;background-color:#ffff66'>mysql</B>_init()以初始化一个连接处理器,然后用该处理器调用<B style='color:black;background-color:#ffff66'>mysql</B>_real_connect()(还有其他信息例如主机名、用户名和口令)。当你用该连接完成工作后,调用<B style='color:black;background-color:#ffff66'>mysql</B>_close()终止它。 
<P>当一个连接活跃时,客户可以用<B style='color:black;background-color:#ffff66'>mysql</B>_query()或<B style='color:black;background-color:#ffff66'>mysql</B>_real_query()将SQL查询发送到服务器。两者的差别是<B style='color:black;background-color:#ffff66'>mysql</B>_query()期望查询作为一个空结尾的字符串来指定而<B style='color:black;background-color:#ffff66'>mysql</B>_real_query()期望一个计数的字符串。如果字符串包含二进制数据(它可以包括空字节),你必须使用<B style='color:black;background-color:#ffff66'>mysql</B>_real_query()。 
<P>对与每个非--SELECT查询(例如,INSERT、UPDATE、DELETE等),你可以调用<B style='color:black;background-color:#ffff66'>mysql</B>_affected_rows()知道有多少行受到影响(改变)。 
<P>对于SELECT查询,你作为一个结果集合来检索选择的行。(注意一些语句是类SELECT的,他们返回行。这些包括SHOW、DESCRIBE和EXPLAIN。他们应该象SELECT语句相同的方式来对待。) 
<P>对客户,有两种方法处理结果集合。一种方法是通过调用<B style='color:black;background-color:#ffff66'>mysql</B>_store_result()立刻检索全部结果。该函数从服务器获得查询返回的所有行,并将他们存储在客户端。第二种方法是对客户通过调用<B style='color:black;background-color:#ffff66'>mysql</B>_use_result()初始化一个一行一行地结果集合的检索。该函数初始化检索,但是实际上不从服务器获得任何行。 
<P>在两种情况中,你通过<B style='color:black;background-color:#ffff66'>mysql</B>_fetch_row()存取行。用<B style='color:black;background-color:#ffff66'>mysql</B>_store_result()、<B style='color:black;background-color:#ffff66'>mysql</B>_fetch_row()储存取已经从服务器被取出的行。用<B style='color:black;background-color:#ffff66'>mysql</B>_use_result()、<B style='color:black;background-color:#ffff66'>mysql</B>_fetch_row()实际上从服务器检索行。调用<B style='color:black;background-color:#ffff66'>mysql</B>_fetch_lengths()可获得关于每行中数据值尺寸的信息。 
<P>在你用完一个结果集合以后,调用<B style='color:black;background-color:#ffff66'>mysql</B>_free_result()释放由它使用的内存。 
<P>两种检索机制是互补的。客户程序应该选择最适合他们的要求的途径。在实践中,客户通常更愿意使用<B style='color:black;background-color:#ffff66'>mysql</B>_store_result()。 
<P><B style='color:black;background-color:#ffff66'>mysql</B>_store_result()的一个优点是既然行均被客户取到,你不仅能顺序存取行,你也能<B style='color:black;background-color:#ffff66'>mysql</B>_data_seek()或<B style='color:black;background-color:#ffff66'>mysql</B>_row_seek()在结果集合中前后移动以改变在结果集合中的当前行位置。你也能通过调用<B style='color:black;background-color:#ffff66'>mysql</B>_num_rows()知道有多少行。另一方面,<B style='color:black;background-color:#ffff66'>mysql</B>_store_result()的内存需求对较大结果集合可能很高,并且你最可能遇到out-of-memory情况。 
<P><B style='color:black;background-color:#ffff66'>mysql</B>_use_result()的一个优点是客户为结果集合需要较少的内存,因为它一次只是维持一行(并且因为有较少的分配开销,<B style='color:black;background-color:#ffff66'>mysql</B>_use_result()能更快些)。缺点是你必须尽快处理每一行以避免困住服务器,你不必再结果集合中随意存取行(你只能顺序存取行),而且你不知道在结果集合中有多少行,直到你检索全部结果。还有,你必须检索出所有行,即使你在检索中途确定你已找到了想寻找的信息。 
<P><B style='color:black;background-color:#99ff99'>API</B>使得客户正确应答查询成为可能(仅检索必要的行),不用知道查询是否是一个SELECT。你可以通过在<B style='color:black;background-color:#ffff66'>mysql</B>_query()(或<B style='color:black;background-color:#ffff66'>mysql</B>_real_query())之后调用<B style='color:black;background-color:#ffff66'>mysql</B>_store_result()做到。如果结果集合调用成功并且查询是一个SELECT,你能读取行。如果结果集合调用,调用<B style='color:black;background-color:#ffff66'>mysql</B>_field_count()确定结果是否是实际期望的。如果<B style='color:black;background-color:#ffff66'>mysql</B>_field_count()返回0,查询没有返回数据(表明它是一个INSERT、UPDATE、DELETE等),所以不期望返回行。如果<B style='color:black;background-color:#ffff66'>mysql</B>_field_count()是非零,查询应该有返回行,但是没有。这表明查询是一个失败的SELECT。见<B style='color:black;background-color:#ffff66'>mysql</B>_field_count()如何能做到的例子的描述。 
<P><B style='color:black;background-color:#ffff66'>mysql</B>_store_result()和<B style='color:black;background-color:#ffff66'>mysql</B>_use_result()都允许你获得有关组成结果集合的字段的信息(字段数量、他们的名字和类型等等)。你可以通过重复调用<B style='color:black;background-color:#ffff66'>mysql</B>_fetch_field()在行中顺序存取字段信息,或调用<B style='color:black;background-color:#ffff66'>mysql</B>_fetch_field_direct()存取行中的字段编号。当前字段光标位置可以通过调用<B style='color:black;background-color:#ffff66'>mysql</B>_field_seek()改变,设置字段光标影响到后续<B style='color:black;background-color:#ffff66'>mysql</B>_fetch_field()调用。你也能通过调用<B style='color:black;background-color:#ffff66'>mysql</B>_fetch_fields()马上获得字段信息。 
<P>对于检测和报告错误,<B style='color:black;background-color:#ffff66'>MySQL</B>借助于<B style='color:black;background-color:#ffff66'>mysql</B>_errno()和<B style='color:black;background-color:#ffff66'>mysql</B>_error()函数提供错误信息的存取。他们返回最近调用的可能成功或失败的函数的错误代码或错误消息,允许你确定何时发生一个错误和什么错误。 
<P>20.4 <B style='color:black;background-color:#A0FFFF'>C</B> <B style='color:black;background-color:#99ff99'>API</B>函数描述<BR>在下面的描述中,一个NULL参数或返回值含义是在<B style='color:black;background-color:#A0FFFF'>C</B>编程语言环境的NULL,不是一个<B style='color:black;background-color:#ffff66'>MySQL</B> NULL值。 
<P>返回一个值的函数一般返回一个指针或一个整数。除非另外指定,返回一个指针的函数返回一个非 NULL值表明成功,或一个NULL值表明一个错误,而返回一个整数的函数返回零表示成功,或非零表示一个错误。注意,&#8220;非零&#8221;只有这个含义。除非函数描述另外说明,不要测试一个零以外的其他值: 
<P>if (result) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* 正确 */<BR>&nbsp; &nbsp;... error ... 
<P>if (result &lt; 0) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* 不正确 */<BR>&nbsp; &nbsp;... error ... 
<P>if (result == -1) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* 不正确 */<BR>&nbsp; &nbsp;... error ... 
<P><BR>当函数返回一个错误时,函数描述的错误小节列出错误可能的类型。你可以调用<B style='color:black;background-color:#ffff66'>mysql</B>_errno()找出发生了这些重的哪一个。错误的字符串表示可以调用<B style='color:black;background-color:#ffff66'>mysql</B>_error()获得。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -