并行MySQL连接关闭临时表

时间:2012-03-05 14:22:32

标签: php mysql

我在社区偶然发现了我的问题,但我找不到解决方案 - 也许是具体的。我在PHP中执行的以下函数/操作序列:

  1. 构建class_1的对象
  2. class_1中的函数连接到没有定义链接标识符的MySQL
  3. 然后我创建了一个临时表[..functions in class_1做某事..]
  4. 调用一个新函数,创建一个class_2的class_2
  5. 在object_2中我使用创建新链接true和链接标识符的参数创建一个新的MySQL连接
  6. 我使用链接标识符
  7. 关闭object_2中与MySQL_close的MySQL连接
  8. 在object_1中临时表仍然不存在/它尝试自动重新连接到MySQL
  9. 如果我不创建object_2,一切正常。我做错了什么?

3 个答案:

答案 0 :(得分:0)

这是按预期工作的。 From the MySQL documentation

  

“临时表

     

创建表时可以使用TEMPORARY关键字。 TEMPORARY表仅对当前连接可见,并在关闭连接时自动删除。这意味着两个不同的连接可以使用相同的临时表名,而不会相互冲突或与现有的同名非TEMPORARY表冲突。 (在删除临时表之前,现有表是隐藏的。)“

为避免发生这种情况,请不要明确关闭连接。来自mysql_close()的PHP文档:

  

“通常不需要使用mysql_close(),因为在脚本执行结束时会自动关闭非持久性开放链接。另请参阅freeing resources。”

相反,您应该将mysql_connect()返回的连接资源存储在本地变量中,以便PHP的垃圾收集器可以在对它的所有引用都超出范围时自动关闭连接。

答案 1 :(得分:0)

如何解决您的问题:在class_1中添加链接标识符,否则mysql库将采用最后一个(您关闭)。

答案 2 :(得分:0)

感谢大家寻求解决方案的帮助。链接标识符解决方案对我来说有点不好。在php.net是我的问题的详细描述和一些提示如何解决:

  

以下是共享链接的工作原理:       - 每个链接都是一种资源。 mysql_connect()默认查找具有相同参数的资源。如果存在,它将返回   现有资源。       - 将该资源分配给变量会增加资源的引用计数。       - 当引用递减为零时,将关闭基础TCP /套接字连接。         - 每个远离该资源的变量赋值都会减少引用计数。 (这包括功能级别   变量超出范围)         - mysql_close()也会减少引用计数。

     

注意最后两点:mysql_close()重新分配一个   变量减少链接的引用计数。