This Domain(Admin5.com) is for Sale:

My SQL数据库实用技术(34)

时间:2007-12-23  来源:不详  作者:迈克DB

■ 假如mysql_field_count() 非零,说明有错误,因为查询应该返回结果集,但却没有。这种情况发生有多种原因。例如:结果集可能太大,内存分配失败,或者在提取行时客户机和服务器之间发生网络中断。
这种过程稍微有点复杂之处就在于, MySQL 3.22.24 之前的早期版本中不存在mysql _ field _ count( ),它们使用的是mysql _ num _ fields ( )。为编写MySQL 任何版本都能运行的程序,在调用mysql_field_count() 的文件中都包含下面的代码块:

这就将对mysql_field_count() 的一些调用看作是比MySQL 3.22.24 更早版本中的mysql_num_fields() 的调用。
■ 假如mysql_field_count() 返回0,就意味着查询不返回结果(这说明查询是类似于INSERT、DELETE、或UPDATE 的语句)。
■ 假如mysql_store_result() 成功,查询返回一个结果集,通过调用mysql_fetch_row() 来处理行,直到它返回NULL 为止。
下面的列表说明了处理任意查询的函数,给出了连接处理程序和空终结查询字符串:
copyright dedecms


6.6.4 可选择的查询处理方法
process_query() 的这个版本有三个特性:
■ 用mysql_query() 发布查询。
■ 用mysql_store_query() 检索结果集。
■ 没有得到结果集时,用mysql_field_count() 把错误事件和不需要的结果集区别开来。针对查询处理的这些特点,有如下三种方法:
■ 可以用计数查询字符串和mysql _ real _ query( ),而不使用空终结查询字符串和mysql _ query( )。
■ 可以通过调用mysql_use_result() 而不是调用mysql_store_result() 来创建结果集。
■ 可以调用mysql_error() 而不是调用mysql_field_count() 来确定结果集是检索失败还是仅仅没有设置检索。
可用以上部分或全部方法代替process _ query( )。以下是一个process_real_query() 函数,它与process_query() 类似,但使用了所有三种方法:
内容来自dedecms

6.6.5 mysql_store_result() 与mysql_use_result() 的比较
函数mysql_store_result() 与mysql_use_result() 类似,它们都有连接处理程序参数,并返回结果集。但实际上两者间的区别还是很大的。两个函数之间首要的区别在于从服务器上检索结果集的行。当调用时, mysql_store_result() 立即检索所有的行,而mysql_use_result() 启动查询,但实际上并未获取任何行, mysql_store_result() 假设随后会调用mysql _ fetch _ row( )检索记录。这些行检索的不同方法引起两者在其他方面的不同。本节加以比较,以便了解如何选择最适合应用程序的方法。
当mysql_store_result() 从服务器上检索结果集时,就提取了行,并为之分配内存,存储到客户机中,随后调用mysql_fetch_row() 就再也不会返回错误,因为它仅仅是把行脱离了已经保留结果集的数据结构。mysql_fetch_row() 返回NULL 始终表示已经到达结果集的末端。相反,mysql_use_result() 本身不检索任何行,而只是启动一个逐行的检索,就是说必须对每行调用mysql_fetch_row() 来自己完成。既然如此,虽然正常情况下, mysql _ fetch _ row( )返回NULL 仍然表示此时已到达结果集的末端,但也可能表示在与服务器通信时发生错误。可通过调用mysql_errno() 和mysql_error() 将两者区分开来。

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息