MYSQL_RES * mysql_use_result(MYSQL * MYSQL)
后调用mysql_real_query ()
或mysql_query ()
,你必须打电话mysql_store_result ()
或mysql_use_result ()
对于成功生成结果集的每个语句(选择
,显示
,描述
,解释
,检查表
等等)。您还必须调用mysql_free_result ()
在您处理完结果集之后。
mysql_use_result ()
初始化结果集检索,但不像实际读取结果集到客户端mysql_store_result ()
所做的事。相反,必须通过调用来单独检索每一行mysql_fetch_row ()
.这将直接从服务器读取查询结果,而不将其存储在临时表或本地缓冲区中,这比直接从服务器读取查询结果快一些,并且使用的内存要少得多mysql_store_result ()
.客户端仅为当前行分配内存和一个通信缓冲区,该缓冲区可能增长到max_allowed_packet
字节。
另一方面,你不应该使用mysql_use_result ()
对于锁定读取,如果您正在对客户端上的每一行进行大量处理,或者输出被发送到用户可能键入a的屏幕^年代
(停止滚动)。这将绑定服务器,并阻止其他线程更新从其中获取数据的任何表。
当使用mysql_use_result ()
,则必须执行mysql_fetch_row ()
直到一个零
值,否则,未提取的行将作为下一个查询的结果集的一部分返回。C API给出了错误命令不同步;现在不能运行此命令
如果你忘了这么做!
你不能使用mysql_data_seek ()
,mysql_row_seek ()
,mysql_row_tell ()
,mysql_num_rows ()
,或mysql_affected_rows ()
返回的结果mysql_use_result ()
,也不能发出其他查询,直到mysql_use_result ()
已经完成了。(但是,在获取所有行之后,mysql_num_rows ()
准确地返回已获取的行数。)
你必须叫mysql_free_result ()
一旦你完成了结果集。
当使用libmysqld
在嵌入式服务器中,由于内存使用量随着每一行的检索而递增,直到mysql_free_result ()
被称为。
mysql_use_result ()
重置mysql_error ()
和mysql_errno ()
如果它成功。
命令的执行顺序不正确。
内存不足。
MySQL服务器已经消失。
在查询过程中,与服务器的连接丢失。
出现未知错误。