在我们公司生产站点的管理员上,我们有一个小的查询转储工具,我在不知不觉中尝试从数据库中获取数据,而不是主数据库,使用了use database命令。
这是踢球者,然后它使每个coldfusion页面的查询立即失败。
因为它以某种方式缓存使用数据库命令。
有没有人听说过这个奇怪的错误?
我们如何阻止这种行为?
如果我使用“使用数据库”命令,我希望它只存在于我正在运行的当前查询之后,在完成之后,回到正常的数据库使用情况。
这很奇怪,也是一个潜在的破坏性问题。
有什么想法吗?
答案 0 :(得分:2)
我想这与连接池有关。当您调用close时,它不会关闭连接,只是将其放回池中。当您调用open时,它不必打开新连接,它只是从池中获取现有连接。如果更改连接指向的数据库,ColdFusion可能不知道这一点。这就是为什么有些平台(例如MySQL在.Net上)每次从池中检索它时重置连接,以确保您查询正确的数据库,并确保您没有任何临时表和其他会话信息闲逛。这种行为的缺点是它必须进行数据库的往返,即使使用池化连接,这实际上可能没有必要。
答案 1 :(得分:1)
Kibbee走在正确的轨道上,但是通过三种可能的解决方法进一步扩展它:
这不是一个错误,也不是真正的意外行为 - 如果查询被缓存,那么cfquery块中的所有内容都会继续运行。您使用的是哪个数据库平台?