在我的一台服务器上,我发生了一件奇怪的事情.
通常,当脚本执行mysql_query($query)时,如果事先成功调用了mysql_connect(),它就可以正常工作.
现在,它的工作时间不到一半.现在我突然不得不编辑一个值得mysql_query调用的整个购物车,以包含以前可选的DB链接.换句话说,mysql_query($query,$db_link)现在是代码的样子.
我暂时这样做,以便访问者仍然可以使用该网站,但我真的需要知道是什么原因造成了这样的事件.
是否有一些设置可能会在某个php.ini文件中以某种方式更改,从而导致此问题?我知道当发生这种情况时我并没有碰到它们,而且我是当时唯一登录服务器的人(据我所知).
最佳答案 在没有连接参数的情况下调用mysql_query()将使用最近建立的连接.因此,只要您只连接到一个数据库,就不会发现任何问题.
从the docs开始:
If the link identifier is not specified, the last link opened by mysql_connect() is assumed. If no such link is found, it will try to create one as if mysql_connect() was called with no arguments. If no connection is found or established, an E_WARNING level error is generated.
如果您添加或包含一些连接到不同数据库的新代码 – 例如,可能是命中跟踪器或分析工具 – 那么这会破坏您现有的代码,因为它会建立另一个mysql连接 – 以及您发生的任何查询在建立新连接之后,现在将使用错误的连接.
即使额外的代码被正确编写并且始终使用自己的连接标识符,也会发生这种情况 – 它不会出现意外使用连接的问题,但您的代码仍然会意外地使用其连接.
要安全地使用mysql_query(),您确实需要跟踪数据库连接,并在每个查询中使用它.
所有这一切 – 如果您正在对所有mysql_ *调用进行更改,请考虑切换到mysqli
.不推荐使用mysql_ *函数和no longer supported. mysqli
扩展几乎可以直接替换,并且还提供支持用于准备语句等功能.
PDO扩展是另一种可能的替代,但在使用mysql_ *切换时需要更多的重写.