This Domain(Admin5.com) is for Sale:

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

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

请注重在打印时mysql _ a ffected_rows() 的结果是如何转换为unsigned long 类型的,这个函数返回一个my_ulonglong 类型的值,但在一些系统上无法直接打印这个类型的值(例如,笔者观察到它可在FreeBSD 下工作,但不能在Solaris 下工作)。把值转换为unsigned long 类型并使用‘% l u’打印格式可以解决这个问题。同样也要考虑返回my_ulonglong 值的其他函数,如mysql_num_rows() 和mysql _ insert _ id ( )。假如想使客户机程序能跨系统地移植,就要谨记这一点。
mysql _ rows _ affected() 返回查询所作用的行数,但是“受作用的行”的含义取决于查询的类型。对于INSERT、DELETE 和UPDATE,是指插入、删除或者更新的行数,也就是MySQL 实际修改的行数。假如行的内容与所要更新的内容相同,则MySQL 就不再更新行。这就是说虽然可能选择行来更新(通过UPDATE 语句的WHERE 子句),但实际上该行可能并未改变。
对于UPDATE,“受作用的行”的意义实际上是个争论点,因为人们想把它当成“被匹配的行”—即选择要更新的行数,即使更新操作实际上并未改变其中的值也是如此。假如应用程序需要这个信息, 则当与服务器连接时可以用它来请求以实现这个功能。将CLIENT_FOUND_ROWS 的flags 值传递给mysql _ real _ connect( )。也可以将CLIENT _ FOUND _ROWS 作为flags 参数传递给do _ connect ( );它将把值传递给mysql _ real _ connect( )。
dedecms.com

6.6.2 处理返回结果集的查询
通过调用mysql_query() 和mysql_real_query() 发布查询之后,返回数据的查询以结果集形式进行。在MySQL 中实现它非常重要, SELECT 不是返回行的唯一语句, SHOW、DESCRIBE 和EXPLAIN 都需要返回行。对所有这些语句,都必须在发布查询后执行另外的处理行操作。
处理结果集包括下面几个步骤:
■ 通过调用mysql_store_result() 或mysql_use_result() 产生结果集。这些函数假如成功则返回MYSQL_RES 指针,失败则返回N U LL。稍后我们将查看mysql_store_result() 与mysql_use_result() 的不同,以及选择其中一个而不选另一个时的情况。我们的样例使
用mysql _ store _ result( ),它能立即从服务器返回行,并将它们存储到客户机中。
■ 对结果集的每一行调用mysql _ fetch _ rows ( )。这个函数返回MYSQL_ROW 值,它是一个指向字符串数组的指针,字符串数组表示行中每列的值。要根据应用程序对行进行操作。可以只打印出列值,执行有关的统计计算,或者做些其他操作。当结果集中不再有行时, mysql_fetch_rows() 返回NULL。
■ 处理结果集时,调用mysql_free_result() 释放所使用的内存。假如忽略了这一点,则应用程序就会泄露出内存(对于长期运行的应用程序,适当地解决结果集是极其重要的;否则,会注重到系统将由一些过程所取代,这些过程消耗着经常增长的系统资源量)。

织梦内容管理系统


下面的样例轮廓介绍了如何处理返回结果集的查询:

我们通过调用函数process_result_set() 来处理每一行,这里有个窍门,因为我们并没有定义这个函数,所以需要这样做。通常,结果的处理集函数是基于下面的循环:

从mysql_fetch_row() 返回的MYSQL_ROW 值是一个指向数值数组的指针,因此,访问每个值就是访问row[i],这里i 的范围是从0到该行的列数减1。这里有几个关于MYSQL_ROW 数据类型的要点需要注重:
■ MYSQL_ROW 是一个指针类型,因此,必须声明类型变量为MYSQL_ROW row,而不是MYSQL_ROW *row。
■ MYSQL_ROW 数组中的字符串是空终结的。但是,列可能含有二进制数据,这样,数据中就可能含有空字节,因此,不应该把值看成是空终结的。由列的长度可知列值有多长。

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

文章评论

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

24小时热门信息