mysql_use_result与mysql_store_result异同点:
通过mysql_use_result取回结果集时,并没有像mysql_store_result那样实际把结果集读到client. 每行必须通过调用mysql_fetch_row()来取回.server上并没有把结果存储在临时表或者本地的缓冲区中,而是直接从server上读取查询的结果.所以它比mysql_store_result稍微快些,内存使用也相对少些. 这样client分配的内存只需要能满足current row 加上最大可以达到
max_allowed_packet字节大小的communication buffer就足够.
假如你需要在client端对每行结果做很多的处理,或者输出到用户可以按^s来停止滚屏的屏幕上,那么就不适合用mysql_use_result.因为这样将挂起server和阻止其他thread更新对应数据的表.
当通过使用mysql_use_result来取回结果时,你必须执行mysql_fetch_row()直到返回NULL,否则未被取回的数据将被包含在下一次查询结果中. 假如你忘记了, c api将给出错误"Commands out of sync; you can't run this command now"!
通过mysql_use_result来取回所有结果(即mysql_fetch_row()返回NULL)之前,是不能使用msyql_data_seek(),mysql_row_seek(),mysql_row_tell(),mysql_num_rows(),mysql_affected_rows()的.(然而,在取回所有行后,mysql_num_rows()是可以正确返回取回的行数的).