什么是"准备好的声明有未决或未读的结果"?

时间:2015-10-25 14:02:35

标签: mysql prepared-statement

PHP手册上的内容以及手册中的一条评论说:

  

关闭准备好的声明。   mysqli_stmt_close()也解除分配   声明句柄。如果是当前的   声明已挂起或未读   结果,这个函数取消了它们   可以执行下一个查询。

注释:

  

如果你在重复一个陈述   使用bind_param等循环   在里面进行更大规模的操作。一世   thougt id很好清理它   与stmt->关闭。但它总是打破   在aprox之后出错。 250   运作。正如我试过的那样   stmt->重置它对我有用。

在这里,我不明白"准备好的陈述是什么意思 有未决或未读的结果"?

1 个答案:

答案 0 :(得分:2)

运行查询的RDBMS可以在处理整个数据集之前返回数据。还有一些记录尚未阅读。

已读取的记录和待处理的记录都必须保存在数据库服务器的某些资源中,通常称为“游标”。

执行应用程序代码语句,从服务器的游标和应用程序的内存中读取这些记录,使用PHP的MySQi包装器称为fetch方法。

现在执行查询后,您没有义务获取任何或所有这些结果。因此,无论哪种方式,在读取查询结果之后,执行mysqli_stmt_close()告诉服务器它可以丢弃光标,即从内存中删除已读取的记录并取消可选的仍在运行的查询。

所以:

  • 未读结果:从数据库中提取,但客户端无法读取。
  • 待定结果:一旦查询运行完成,将包含在结果集中的记录。