PHP已经停止隐式检测MySQL数据库链接

时间:2013-07-29 02:33:07

标签: php mysql

在我的一台服务器上,我发生了一件奇怪的事情。

通常情况下,当脚本执行mysql_query($query)时,如果事先成功调用了mysql_connect(),它就会正常工作。

现在,它的工作时间不到一半。现在,我突然不得不编辑一个名为mysql_query调用的整个购物车,以包含以前可选的DB链接。换句话说,mysql_query($query, $db_link)现在是代码的样子。

我暂时这样做,以便访问者仍然可以使用该网站,但我真的需要知道可能导致此类事件的原因。

是否有某些设置可能会在某个php.ini文件中以某种方式更改而导致此问题?我知道当发生这种情况时我没有碰到它们,而且我是当时唯一登录服务器的人(据我所知)。

1 个答案:

答案 0 :(得分:2)

在没有连接参数的情况下调用mysql_query()将使用最近建立的连接。因此,只要您只连接到一个数据库,就不会发现任何问题。

来自the docs

  

如果未指定链接标识符,则假定mysql_connect()打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个,就好像没有参数调用mysql_connect()一样。如果未找到或建立连接,则会生成E_WARNING级别错误。

如果您添加或包含一些连接到不同数据库的新代码 - 例如,可能是命中跟踪器或分析工具 - 那么这可能会破坏您现有的代码,因为它建立了另一个mysql连接 - 以及任何一个建立新连接后发生的查询现在将使用错误的连接。

即使正确编写了额外的代码并且总是使用自己的连接标识符,也会发生这种情况 - 它不会出现意外使用连接的问题,但您的代码仍会意外地使用其连接。

要安全地使用mysql_query(),您确实需要跟踪数据库连接,并在每个查询中使用它。


所有这一切 - 如果您对所有mysql_*电话进行了更改,请考虑切换到mysqlimysql_*函数已弃用且no longer supportedmysqli扩展名几乎可以替代,也可以为预备语句等功能提供支持。

PDO扩展程序是另一种可能的替代方案,但在使用mysql_*切换时需要更多的重写。