4

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

通常,当脚本执行时,如果事先成功调用mysql_query($query)它就可以工作。mysql_connect()

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

我暂时这样做了,以便访问者仍然可以使用该网站,但我真的需要知道是什么导致了这样的事件。

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

4

1 回答 1

2

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

文档

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

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

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

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


话虽如此 - 如果您要更改所有mysql_*呼叫,请考虑切换到mysqli. 这些mysql_*功能已弃用且不再受支持。该mysqli扩展几乎可以直接替代,并且还提供对准备好的语句等功能的支持。

PDO扩展是另一种可能的替代品,但从使用mysql_*.

于 2013-07-29T04:50:47.270 回答