在我的一台服务器上,我发生了一件奇怪的事情。
通常情况下,当脚本执行mysql_query($query)
时,如果事先成功调用了mysql_connect()
,它就会正常工作。
现在,它的工作时间不到一半。现在,我突然不得不编辑一个名为mysql_query调用的整个购物车,以包含以前可选的DB链接。换句话说,mysql_query($query, $db_link)
现在是代码的样子。
我暂时这样做,以便访问者仍然可以使用该网站,但我真的需要知道可能导致此类事件的原因。
是否有某些设置可能会在某个php.ini文件中以某种方式更改而导致此问题?我知道当发生这种情况时我没有碰到它们,而且我是当时唯一登录服务器的人(据我所知)。
答案 0 :(得分:2)
在没有连接参数的情况下调用mysql_query()
将使用最近建立的连接。因此,只要您只连接到一个数据库,就不会发现任何问题。
来自the docs:
如果未指定链接标识符,则假定mysql_connect()打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个,就好像没有参数调用mysql_connect()一样。如果未找到或建立连接,则会生成E_WARNING级别错误。
如果您添加或包含一些连接到不同数据库的新代码 - 例如,可能是命中跟踪器或分析工具 - 那么这可能会破坏您现有的代码,因为它建立了另一个mysql连接 - 以及任何一个建立新连接后发生的查询现在将使用错误的连接。
即使正确编写了额外的代码并且总是使用自己的连接标识符,也会发生这种情况 - 它不会出现意外使用连接的问题,但您的代码仍会意外地使用其连接。
要安全地使用mysql_query()
,您确实需要跟踪数据库连接,并在每个查询中使用它。
所有这一切 - 如果您对所有mysql_*
电话进行了更改,请考虑切换到mysqli
。 mysql_*
函数已弃用且no longer supported。 mysqli
扩展名几乎可以替代,也可以为预备语句等功能提供支持。
PDO扩展程序是另一种可能的替代方案,但在使用mysql_*
切换时需要更多的重写。