Php资源id溢出错误

Bap*_*ist 7 php mysql mysqli

我有一个PHP服务器应用程序收获推文,从而持续运行.此应用程序在几天后开始失败.拒绝返回mysql select语句的结果.我发现这是由于php资源id溢出(PHP警告):

-2147483648不是有效的MySQL结果资源

这意味着应用程序正在耗尽可能的ID以分配给资源变量(因为要触发的查询语句数量非常大).我认为这个问题的答案是在每个mysql select语句下使用mysql_free_result,以便最终释放每个资源.但这并没有解决我的问题.

在某些论坛上,我读到PHP无法重用已发布的资源ID. 这意味着唯一合理的解决方案是重新连接到mysql数据库?

关于我的PHP版本的一些信息:

PHP 5.5.10-1 + deb.sury.org~precision + 1(cli)(内置:2014年3月27日16:18:01)版权所有(c)1997-2014 PHP Group Zend Engine v2.5.0,版权所有(c )1998-2014 Zend Technologies与Zend OPcache v7.0.3,版权所有(c)1999-2014,作者:Zend Technologies

有没有人有这个问题的经验?另一个解决方案是使用mysqli扩展而不是常规扩展吗?

谢谢!

Sel*_*lay 1

该错误并不一定意味着“应用程序没有可能分配给资源变量的 id”。实际上,这可能是由于您(如果不正确)使用 mysql_free_result() 引起的,因为稍后尝试使用已清除的资源执行某些操作会产生如您所见的错误。确保您没有临时“缓存”或在会话中保留资源 ID 并重复使用它们。

但是,如果您确定您的应用程序用完了资源 ID,则可以使用 unset() 或 mysql_free_result() 释放资源,然后释放的 ID 再次可用,并且 PHP 可以再次重用这些资源。但在 64 位系统中,您不太可能用完资源 ID。

最好对程序本身进行优化,不要浪费资源,而不是耗尽资源然后重新设置。你不可能这么快就耗尽丰富的资源。

当你调用 mysql_free_result() 时发生了什么?顺便说一句,如果你使用 mysqli,你应该使用 mysqli_result::free 而不是 mysql_free_result()。