【发布时间】:2018-04-27 12:09:14
【问题描述】:
我正在为 MySQL 5.5 编写我的第一个 C 客户端,并且在文档中偶然发现了 the following page。几乎在最后,它说(粗体强调我的,斜体强调不是我的):
mysql_use_result() 的一个优点是 [...]。缺点是 [...]。 此外,您必须检索所有行,即使您 在检索过程中确定您已经找到了您的信息 正在寻找。
最后一句话我不清楚。
1) 如果我不遵循这条线会发生什么?
2) 我认为,如果我确定我有足够的信息,那么实际上一定有一种方法可以提前结束获取行(否则,整个事情在我眼中没有多大意义)。
我知道如果我只是停止获取行然后尝试执行下一条语句,可能会发生一些不好的事情,但是没有类似 mysql_finish_fetch() 或类似的函数吗?
如果我打电话给mysql_free_result() 会发生什么?即使我还没有获取所有行,这也应该释放结果,因此在检索过程中调用它并继续我想做的任何事情都应该是安全的。我错了吗?
【问题讨论】:
-
有据可查:
When using mysql_use_result(), you must execute mysql_fetch_row() until a NULL value is returned, otherwise, the unfetched rows are returned as part of the result set for your next query. The C API gives the error Commands out of sync; you can't run this command now if you forget to do this! -
您通常应该准确地查询您需要的信息。查询更多然后开始在结果中寻找“重要部分”是错误的方法!如果您确实需要以如此复杂的方式进行过滤,而使用普通 sql 无法实现,请使用存储过程
-
@Ctx 我同意你的第二条评论。尽管如此,一些具有 MySQL 绑定的脚本语言(例如 Perl)具有“语句/获取完成功能”,我想知道它是如何工作的。我在某些非常方便的情况下使用了它。
-
我认为这些也必须在后台获取剩余的行